C# WPF Items使用变量路径绑定控制数据

C# WPF Items使用变量路径绑定控制数据,c#,wpf,xaml,C#,Wpf,Xaml,我试图创建一个UserControl,其中包含一个ItemsControl,它应该显示参数及其值。这些值必须是可编辑的,并且这些值应传输回ViewModel 应该可以定义哪个属性表示参数名称,哪个属性表示参数值 参数类: 公共类参数 { 公共字符串名称{get;set;} 公共字符串值{get;set;} } 视图模型: 公共类MyViewModel:INotifyPropertyChanged { ... 公共ObservableCollection参数{get;set;} ... } U

我试图创建一个UserControl,其中包含一个ItemsControl,它应该显示参数及其值。这些值必须是可编辑的,并且这些值应传输回ViewModel

应该可以定义哪个属性表示参数名称,哪个属性表示参数值

参数类:

公共类参数
{
公共字符串名称{get;set;}
公共字符串值{get;set;}
}
视图模型:

公共类MyViewModel:INotifyPropertyChanged
{
...
公共ObservableCollection参数{get;set;}
...
}
UserControl(“ParameterList.xaml”):


用户控制代码隐藏:

public分部类参数列表:UserControl
{
公共IEnumerable参数
{
get=>(IEnumerable)GetValue(ParametersProperty);
set=>SetValue(参数属性,值);
}
公共字符串参数NameMember
{
get=>(字符串)GetValue(ParameterNameMemberProperty);
set=>SetValue(ParameterNameMemberProperty,value);
}
公共字符串参数ValueMember
{
get=>(字符串)GetValue(ParameterValueMemberProperty);
set=>SetValue(参数valuememberproperty,value);
}
公共静态只读从属属性参数属性=
DependencyProperty.Register(“参数”、类型(对象),
typeof(ParameterList),新属性元数据(默认值(IEnumerable));
公共静态只读DependencyProperty参数NameMemberProperty=
DependencyProperty.Register(“ParameterNameMember”,类型为(字符串),
typeof(参数列表),新属性元数据(“”);
公共静态只读DependencyProperty参数ValueMemberProperty=
DependencyProperty.Register(“ParameterValueMember”,类型为(字符串),
typeof(参数列表),新属性元数据(“”);
公共参数列表()
{
初始化组件();
}
}
我希望按如下方式使用控件:



因为我没有太多的WPF经验,所以我需要一些数据绑定方面的帮助。如果我能得到一些有用的建议,我将不胜感激。

名称和价值代替???如果其余绑定已更正,则问题是代码中的参数不可绑定。您可以从DependencyObject继承它,并将名称和值定义为DP,以便它们反映UI中的任何更改。此外,我认为没有任何理由两次定义参数(一次在VM中,一次在UC中)。在我看来,您必须完全删除UC代码,并且只绑定到VM。有一个额外的数据层什么也做不到。对不起,我误读了你的帖子。我认为,按照您所描述的那样做的唯一方法是通过反射,这种反射既慢又难看,因为您需要用代码编写绑定。另一种方法是对UC使用泛型类型并将参数的类型传递给它,而忘记发送“name”和“Value”成员的名称,而是在所有视图模型中为它们使用接口。我更喜欢第三个选项,即将数据转换为具有固定名称的通用VM。@Felix:您必须根据参数值以编程方式生成
ItemTemplate
。无法使用XAML标记将动态绑定路径注入到
数据模板中???如果其余绑定已更正,则问题是代码中的参数不可绑定。您可以从DependencyObject继承它,并将名称和值定义为DP,以便它们反映UI中的任何更改。此外,我认为没有任何理由两次定义参数(一次在VM中,一次在UC中)。在我看来,您必须完全删除UC代码,并且只绑定到VM。有一个额外的数据层什么也做不到。对不起,我误读了你的帖子。我认为,按照您所描述的那样做的唯一方法是通过反射,这种反射既慢又难看,因为您需要用代码编写绑定。另一种方法是对UC使用泛型类型并将参数的类型传递给它,而忘记发送“name”和“Value”成员的名称,而是在所有视图模型中为它们使用接口。我更喜欢第三个选项,即将数据转换为具有固定名称的通用VM。@Felix:您必须根据参数值以编程方式生成
ItemTemplate
。无法使用XAML标记将动态绑定路径注入到
DataTemplate