Прежде всего, я хорошо разбираюсь в английском. Поэтому извините, если скажу, что вы не можете понять.
У меня есть приложение WPF с 2 списками. И я хочу переделать приложение как MVVM.
Но я не знаю, как кодировать событие SelectionChanged как MVVM.
Я попробовал этот код.
В коде просмотра он содержит комментарий. Это код, который я добавляю, тогда я получаю совет, мой друг. (Но это тоже не работа.)
// View
xmlns:xcad="http://schemas.xceed.com/wpf/xaml/toolkit"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox HorizontalAlignment="Left" Height="56" Margin="64,67,0,0" VerticalAlignment="Top" Width="380" SelectedItem="{Binding SelectColorList}" ItemsSource="{Binding ColorList}"/>
<ListBox HorizontalAlignment="Left" Height="56" Margin="64,182,0,0" VerticalAlignment="Top" Width="380" ItemsSource="{Binding ItemList}"/>
<!--<xcad:CheckListBox HorizontalAlignment="Left" Height="56" Margin="64,67,0,0" VerticalAlignment="Top" Width="380" SelectedItemsOverride="{Binding SelectColorList}" ItemsSource="{Binding ColorList}"/>
<xcad:CheckListBox HorizontalAlignment="Left" Height="56" Margin="64,182,0,0" VerticalAlignment="Top" Width="380" ItemsSource="{Binding ItemList}"/>-->
<Label Content="Color" HorizontalAlignment="Left" Height="24" Margin="65,38,0,0" VerticalAlignment="Top" Width="65"/>
<Label Content="Item" HorizontalAlignment="Left" Height="24" Margin="64,153,0,0" VerticalAlignment="Top" Width="65"/>
</Grid>
// CodeBehinde
private MainViewModel viewmodel;
public MainWindow()
{
InitializeComponent();
viewmodel = new MainViewModel();
this.DataContext = viewmodel;
}
// ViewModel
public class MainViewModel : INotifyPropertyChanged
{
private ObservableCollection<string> ColorListVal;
public ObservableCollection<string> ColorList
{
get { return ColorListVal; }
set
{
ColorListVal = value;
NotifyPropertyChanged("ColorList");
}
}
private ObservableCollection<string> SelectColorListVal = new ObservableCollection<string>();
public ObservableCollection<string> SelectColorList
{
get { return SelectColorListVal; }
set
{
SelectColorListVal = value;
NotifyPropertyChanged("SelectColorList");
ItemListVal.Clear();
for (int i = 0; i < SelectColorList.Count; i++)
{
switch (SelectColorList[i])
{
case "red":
ItemListVal.Add("apple");
ItemListVal.Add("sun");
break;
case "blue":
ItemListVal.Add("sea");
ItemListVal.Add("sky");
break;
case "yellow":
ItemListVal.Add("lemmon");
ItemListVal.Add("pineapple");
break;
case "green":
ItemListVal.Add("vegetable");
ItemListVal.Add("greentea");
break;
}
}
}
}
private ObservableCollection<string> ItemListVal;
public ObservableCollection<string> ItemList
{
get { return ItemListVal; }
set
{
ItemListVal = value;
NotifyPropertyChanged("ItemList");
}
}
public MainViewModel()
{
ColorListVal = new ObservableCollection<string>() { "red", "blue", "yellow", "green" };
ItemListVal = new ObservableCollection<string>() { "not selected!" };
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
Я хочу сделать это ...
@ Если я нажму «красный», в списке элементов будут показаны «яблоко» и «солнце» в виде ListBox. Тогда, если я нажму синий ... это то же самое.
@ Хочу щелкнуть многоцветным! Поэтому, если я нажму на красный и синий, список пунктов будет «яблоко», «солнце», «море» и «небо». (Но мне все равно порядок списка)
@ Список (как по цвету, так и по предмету) не совпадает. Поэтому я хочу установить содержимое как динамическое и добавить элементы как динамическое.
Что мне переделать этот код?