Установка атрибута для свойства модели, которое ограничено полем со списком для выбранного элемента после присвоения нуля, не обновляется обратно в свойство модели. Например: в нашем сценарии мы обновляем источник товара и выбираем его динамически. Здесь мы устанавливаем выбранный элемент как ноль, после чего обрабатываем ноль и возвращаемся к первому элементу поля со списком. Представление получило обновления должным образом, но модель все еще содержит только ноль. Пожалуйста, найдите ниже код для справки.
public class ViewModel : BaseViewModel
{
ObservableCollection<string> Xitems;
string Xselected;
public ObservableCollection<string> XItems
{
get
{
return Xitems;
}
set
{
Xitems = value;
NotifyPropertyChanged();
}
}
public string XSelected
{
get
{
return Xselected;
}
set
{
Xselected = value;
NotifyPropertyChanged();
}
}
ObservableCollection<string> Yitems;
string Yselected;
public ObservableCollection<string> YItems
{
get
{
return Yitems;
}
set
{
Yitems = value;
NotifyPropertyChanged();
}
}
public string YSelected
{
get
{
return Yselected;
}
set
{
Yselected = value;
NotifyPropertyChanged();
}
}
public bool isModified { get; set; }
}
public partial class MainWindow : Window
{
ViewModel viewModel = new ViewModel();
static MainWindow()
{
}
public MainWindow()
{
DataContext = viewModel;
viewModel.XItems = new ObservableCollection<string> { "Thadam", "Comali", "Kaithi", "Thuppakki", "Kaththi" };
viewModel.XSelected = "Kaththi";
viewModel.YItems = new ObservableCollection<string>() { "B", "A", "C" };
viewModel.YSelected = "A";
InitializeComponent();
}
private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if((sender as ComboBox).IsKeyboardFocusWithin)
{
viewModel.isModified = false;
viewModel.YItems = new ObservableCollection<string>() { "Banana", "Apple", "Ice" };
viewModel.YSelected = "Apple";
viewModel.isModified = true;
viewModel.YSelected = null;
}
}
private void ComboBox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (viewModel.isModified)
{
(sender as ComboBox).SelectedIndex = 0;
MessageBox.Show(viewModel.YSelected);
}
}
}
xaml
<StackPanel>
<ComboBox ItemsSource="{Binding XItems}" SelectedItem="{Binding XSelected}" SelectionChanged="ComboBox1_SelectionChanged"></ComboBox>
<ComboBox ItemsSource="{Binding YItems}" SelectedItem="{Binding YSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectionChanged="ComboBox2_SelectionChanged"></ComboBox>
</StackPanel>
Обратите внимание, что в окне сообщения по-прежнему отображается только ноль.