Set dependency properties in XAML when the base class is generic

后端 未结 1 1877
[愿得一人]
[愿得一人] 2021-01-05 20:37

As per the title really, how can you set a dependency property in XAML when the base class is generic? When trying to do this I get a NullReferenceException, setting the pro

相关标签:
1条回答
  • 2021-01-05 21:21

    My guess is that the problem lies with the owner type of the dependency property (typeof(WindowBase<ViewModel>). Each closed generic type will be a completely different runtime type so while the compiler is happy that the property exists the WPF runtime can't find it when it looks the property up against the (different) type in its internal storage.

    As you found, the non-generic class works because the owner type and the runtime type are the same.

    You can get the behaviour you want by pushing the DPs to a non-generic base but still derive your views from a generic class to get the strongly typed models

    public class WindowBase : Window
    {
        public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register(
            "Header", typeof(string), typeof(WindowBase), new PropertyMetadata("No Header Name Assigned"));
    
        public string Header
        {
            get { return (string)GetValue(HeaderProperty); }
            protected set { SetValue(HeaderProperty, value); }
        }
    }
    
    public class WindowBase<ViewModel> : WindowBase
    {
        protected ViewModel Model { get; set; }
    }
    
    0 讨论(0)
提交回复
热议问题