C# (WPF、数据绑定、DependencyProperty)我可以只获取列表中特定成员变量的列表吗?
首先,这个问题的主要目的是让其他团队成员更容易在viewmodel中使用我的代码。这是一个为合作设计好代码的问题。因此,使用DependencyProperty,并使用数据绑定 我想做的是,如果用户向MyDependencyProperty列表添加一个值,那么与整个UI相对应的内容将自动应用数据绑定。在本例中,它将是一个组合框。在ItemsSource属性中显示列表,并使用SelectedItem属性选中所选项目 所以我写了下面的代码。但是,在用户定义类型MyData的列表中,我陷入了特定成员(MyData类中的Data1、Data2、Data3)列表到ComboBox控件的数据绑定中 从一开始,代码设计就可能是错误的。征求意见。代码如下C# (WPF、数据绑定、DependencyProperty)我可以只获取列表中特定成员变量的列表吗?,c#,wpf,mvvm,data-binding,dependency-properties,C#,Wpf,Mvvm,Data Binding,Dependency Properties,首先,这个问题的主要目的是让其他团队成员更容易在viewmodel中使用我的代码。这是一个为合作设计好代码的问题。因此,使用DependencyProperty,并使用数据绑定 我想做的是,如果用户向MyDependencyProperty列表添加一个值,那么与整个UI相对应的内容将自动应用数据绑定。在本例中,它将是一个组合框。在ItemsSource属性中显示列表,并使用SelectedItem属性选中所选项目 所以我写了下面的代码。但是,在用户定义类型MyData的列表中,我陷入了特定成员(
public partial class MainWindow : Window
{
public class MyData
{
public MyData(int data1, int data2, int data3)
{
Data1 = data1;
Data2 = data2;
Data3 = data3;
}
public int Data1 { get; set; }
public int Data2 { get; set; }
public int Data3 { get; set; }
}
public List<MyData> MyDataList
{
get => (List<MyData>)GetValue(MyDataListProperty);
set => SetValue(MyDataListProperty, value);
}
public static readonly DependencyProperty MyDataListProperty = DependencyProperty.Register(
"MyDataList", typeof(List<MyData>), typeof(MainWindow), new UIPropertyMetadata(new List<MyData>()));
public MyData CurrentMyData
{
get => (MyData)GetValue(CurrentMyDataProperty);
set => SetValue(CurrentMyDataProperty, value);
}
public static readonly DependencyProperty CurrentMyDataProperty = DependencyProperty.Register(
"CurrentMyData", typeof(MyData), typeof(MainWindow), new UIPropertyMetadata(null));
public MainWindow()
{
InitializeComponent();
DataContext = this;
MyDataList.Add(new MyData(1, 2, 3));
MyDataList.Add(new MyData(4, 5, 6));
MyDataList.Add(new MyData(7, 8, 9));
CurrentMyData = MyDataList[1];
}
}
公共部分类主窗口:窗口
{
公共类MyData
{
公共MyData(int数据1、int数据2、int数据3)
{
数据1=数据1;
数据2=数据2;
数据3=数据3;
}
public int Data1{get;set;}
公共int数据2{get;set;}
公共int数据3{get;set;}
}
公共列表MyDataList
{
get=>(列表)GetValue(MyDataListProperty);
set=>SetValue(MyDataListProperty,value);
}
公共静态只读DependencyProperty MyDataListProperty=DependencyProperty.Register(
“MyDataList”、typeof(列表)、typeof(主窗口)、新UIPropertyMetadata(新列表());
公共MyData CurrentMyData
{
get=>(MyData)GetValue(CurrentMyDataProperty);
set=>SetValue(CurrentMyDataProperty,value);
}
公共静态只读DependencyProperty CurrentMyDataProperty=DependencyProperty.Register(
“CurrentMyData”、typeof(MyData)、typeof(MainWindow)、新UIPropertyMetadata(null);
公共主窗口()
{
初始化组件();
DataContext=this;
添加(新的MyData(1,2,3));
添加(新的MyData(4,5,6));
添加(新的MyData(7,8,9));
CurrentMyData=MyDataList[1];
}
}
ItemsSource可以包含任何复杂的对象。如果ComboBox只显示一个属性,请设置DisplayMemberPath:
<ComboBox
ItemsSource="{Binding MyDataList}"
SelectedItem="{Binding CurrentMyData}"
DisplayMemberPath="Data3"/>
要显示许多属性,请更改ItemTemplate:
<ComboBox
ItemsSource="{Binding MyDataList}"
SelectedItem="{Binding CurrentMyData}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Data1}"/>
<TextBlock Text="{Binding Data2}"/>
<TextBlock Text="{Binding Data3}"/>
<StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
例如,其目的之一是将MyData的Data3成员的内容显示为组合框列表。如果用户将MyData添加到MyDataList,则会自动添加新的Data3成员值。在上面的实际示例中,整数值3、6和9将显示在组合框的列表中。
<ComboBox
ItemsSource="{Binding MyDataList}"
SelectedItem="{Binding CurrentMyData}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Data1}"/>
<TextBlock Text="{Binding Data2}"/>
<TextBlock Text="{Binding Data3}"/>
<StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>