How do I set WPF xaml form's Design DataContext to class that uses generic type parameters

前端 未结 2 1771
暗喜
暗喜 2020-12-09 11:57

Originally my .xaml form used the following line to set the Designer\'s DataContext where the view model was a non-generic type (note I\'m talking about the Design time

相关标签:
2条回答
  • 2020-12-09 12:26

    That is not possible unless the markup extension (DesignInstance) provides properties to pass type arguments, which i doubt. So you might want to subclass as suggested or write your own markup extension which creates generic instances (in fact that is what i am doing right now).

    Edit: This extension should do it:

    public class GenericObjectFactoryExtension : MarkupExtension
    {
        public Type Type { get; set; }
        public Type T { get; set; }
    
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            var genericType = Type.MakeGenericType(T);
            return Activator.CreateInstance(genericType);
        }
    }
    

    Initially i had some problems getting the object type from a type-name but you can let the XAML parser resolve the type for you which is neat:

    DataContext="{me:GenericObjectFactory Type={x:Type Dialogs:CustomerSearchDlogViewModel`1},
                                          T=Data:Customer}"
    

    (Note the `1 at the end to reference a generic type. If you drop the x:Type wrapping the backtick will cause an error.)

    0 讨论(0)
  • 2020-12-09 12:44

    A clean option would be to create a new type which just flattens the generic type:

    public class CustomerSearchDialogViewModel : SearchDialogViewModel<Customer> 
    {
    }
    
    0 讨论(0)
提交回复
热议问题