Выбранное поле со списком Элемент обновлен до свойства модели - PullRequest
0 голосов
/ 10 апреля 2020

Установка атрибута для свойства модели, которое ограничено полем со списком для выбранного элемента после присвоения нуля, не обновляется обратно в свойство модели. Например: в нашем сценарии мы обновляем источник товара и выбираем его динамически. Здесь мы устанавливаем выбранный элемент как ноль, после чего обрабатываем ноль и возвращаемся к первому элементу поля со списком. Представление получило обновления должным образом, но модель все еще содержит только ноль. Пожалуйста, найдите ниже код для справки.

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>

Обратите внимание, что в окне сообщения по-прежнему отображается только ноль.

...