信息
我们正在处理.NET 4.0,WPF并试图将一些数据绑定到通用抽象基类。
我们的课程如下所示。这些类中的每一个都有一个公共的无参数构造函数,尽管我在这篇文章中将它们遗漏了。另请注意,类中的所有属性都将其setter扩展为封装 PropertyChanged 事件。这些也被省略,以使其更具可读性。
设置类
public abstract class BaseSettings : INotifyPropertyChanged
{
public string Y { get; set; }
}
public class SomeSettings : BaseSettings
{
// SomeOtherSettings : BaseSettings
public SomeOtherSettings OTHER { get; set; }
}
public class SomeOtherSettings : BaseSettings
{
public string X { get; set; }
}
用户控件
public abstract class BaseControl<S> : UserControl
where S : BaseSettings, new()
{
public S Settings
{
get { return (S)GetValue(SettingsProperty); }
set { SetValue(SettingsProperty, value); }
}
public static readonly DependencyProperty SettingsProperty =
DependencyProperty.Register("Settings", typeof(S), typeof(BaseControl<S>), new PropertyMetadata(null));
}
public partial class MyControl : BaseControl<SomeOtherSettings>
{
}
<m:BaseControl x:Class=ProperClassPathHere
x:TypeArguments=s:SomeSettings
xmlns:s=ProperClassPathToSomeSettingsHere />
<TextBox Text={Binding Settings.X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} />
</m:BaseControl>
主窗口
public partial class MainWindow : Window
{
public SomeSettings SomeSettings { get; set; }
}
<Window x:Class=ProperClassPathHere />
<u:MyControl Settings={Binding Settings.OTHER} />
</Window>
问题
我们能够在MainWindow中绑定Settings.OTHER,但MyControl的DataContext应该与MainWindow不同。因此,我们永远不会在文本框中看到X的值...
另请注意:
我们在这里缺少什么?甚至有解决这个问题的方法吗?任何见解都将不胜感激。