Я предполагаю, что проблема заключается в типе владельца свойства зависимостей (typeof (WindowBase ). Каждый закрытый универсальный тип будет совершенно другим типом среды выполнения, поэтому компилятор будет счастливчто свойство существует, среда выполнения WPF не может найти его, когда оно ищет свойство в сравнении с (другим) типом во внутреннем хранилище.
Как вы обнаружили, неуниверсальный класс работает, потому что тип владельца итип времени выполнения тот же.
Вы можете получить желаемое поведение, переместив DP в неуниверсальную базу, но по-прежнему выводя ваши представления из универсального класса, чтобы получить строго типизированные модели
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; }
}