Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带绑定的WPF抽象泛型用户控件_C#_.net_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 带绑定的WPF抽象泛型用户控件

C# 带绑定的WPF抽象泛型用户控件,c#,.net,wpf,xaml,data-binding,C#,.net,Wpf,Xaml,Data Binding,信息 我们正在处理.NET4.0和WPF,并试图将一些数据绑定到通用抽象基类。 我们的课程如下所示。这些类中的每一个都有一个公共的无参数构造函数,尽管我在本文中没有提到它们。还要注意,类中的所有属性都扩展了它们的setter,以封装PropertyChanged事件。为了便于阅读,这里也省略了这些内容 设置类 公共抽象类基本设置:INotifyPropertyChanged { 公共字符串Y{get;set;} } public类SomeSettings:BaseSettings { //其他

信息
我们正在处理.NET4.0和WPF,并试图将一些数据绑定到通用抽象基类。 我们的课程如下所示。这些类中的每一个都有一个公共的无参数构造函数,尽管我在本文中没有提到它们。还要注意,类中的所有属性都扩展了它们的setter,以封装PropertyChanged事件。为了便于阅读,这里也省略了这些内容

设置类

公共抽象类基本设置:INotifyPropertyChanged
{
公共字符串Y{get;set;}
}
public类SomeSettings:BaseSettings
{
//其他一些设置:基本设置
public SomeOtherSettings OTHER{get;set;}
}
public类SomeOtherSettings:BaseSettings
{
公共字符串X{get;set;}
}
用户控制

公共抽象类BaseControl:UserControl
其中S:BaseSettings,new()
{
公共场所设置
{
get{return(S)GetValue(SettingsProperty);}
set{SetValue(SettingsProperty,value);}
}
公共静态只读从属属性设置属性=
DependencyProperty.Register(“设置”、typeof(S)、typeof(BaseControl)、new PropertyMetadata(null));
}
公共部分类MyControl:BaseControl
{
}

主窗口

公共部分类主窗口:窗口
{
public SomeSettings SomeSettings{get;set;}
}

问题
我们可以在主窗口中绑定Settings.OTHER,但MyControl的DataContext应该与主窗口的不同。因此,我们永远不会在文本框中看到X的值

另请注意:

  • 因为有一个抽象的父类,所以我们不能在这里使用x:Name属性
  • 如果我们自己在MyControl上设置DateContext,则主窗口无法再绑定Settings.OTHER

我们错过了什么?这个问题有解决办法吗?任何见解都将不胜感激。

泛型不属于UI。使用合适的数据模板。这是一个相当苛刻的说法。。。首先,没有论证。其次,考虑到我们必须显示相当多的设置,每个设置都扩展了BaseSettings,根据基本的面向对象编程,它将实现一次性原则。你基本上是说我们需要创建几十个UserControl,每个都有自己的属性(和其他方法)?或者干脆不创建用户控件,创建一个没有人愿意滚动的主窗口….?我真的不知道你在问什么。“MyControl的DataContext应该与主窗口不同。”您希望MyControl的DataContext是什么?不管你想要什么,把它设定成那样<代码>