Прежде всего, основная цель этого вопроса - облегчить другим членам команды использование моего кода в viewmodel. Это вопрос хорошего дизайна кода для сотрудничества. Следовательно, используется DependencyProperty, и также используется привязка данных.
Я хочу сделать так, чтобы если пользователь добавлял значение в мой список DependencyProperty, содержимое, соответствующее всему пользовательскому интерфейсу, автоматически применялось с данными привязка. В примере это будет ComboBox. Отобразите список в свойстве ItemsSource и проверьте выбранный элемент с помощью свойства SelectedItem.
Итак, я написал код, как показано ниже. Но в списке определяемого пользователем типа MyData я застрял в привязке данных списка для определенного c члена (Data1, Data2, Data3 в классе MyData) к элементу управления ComboBox.
С самого начала дизайн кода мог быть неправильным. Попросить совета. Код ниже.
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];
}
}
<TextBox Width="120" Height="23" Margin="76,160,596,236"
Text="{Binding CurrentMyData.Data2, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<ComboBox Width="189" Height="34" Margin="291,160,312,225"
ItemsSource="{Binding <!-- list for Data3 -->, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding <!-- and selected item. CurrentMyData.Data3 ? -->, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>