Значение Combobox не остается прежним, если не переустанавливать WPF - PullRequest
0 голосов
/ 08 октября 2018

Я прочитал связанные проблемы, но моя проблема все еще возникает.Я пытаюсь выбрать соединение с базой данных из выпадающего списка и, если оно не может подключиться, переключить значение комбинированного списка обратно на предыдущее.Код:

 public string SelectedConnStringValue
    { 
        get { return _selectedConnStringValue; }
        set
        {
            if (!DBConn.Instance.Open(value))
            {
                System.Windows.MessageBox.Show("Attempt failed", "Error!", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            else
            {
                DBConn.Instance.Close();
                _selectedConnStringValue = value;
                DefaultConf.Instance.DefaultConnectionStringName = value;
            }
            OnPropertyChanged("SelectedConnStringValue");
        }
    }


    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));

    }

XAML

 <ComboBox x:Name="serversComboBox" SelectedValuePath="Name" DisplayMemberPath="Name" Width="120" Margin="672,0,0,0" Height="25" 
            ItemsSource="{Binding Path=Connections}" Text="{Binding SelectedConnStringValue}"/>

Проблема заключается в том, что я пытаюсь ввести неверную строку подключения.Я хочу затем повторно выбрать комбо-значение к предыдущему, таким образом, вообще не обновляя его, но оно не работает.Я пытался сделать RaisePropertyChanged ("SelectedConnStringValue");вместо OnPropertyChanged, но ничего не делает

1 Ответ

0 голосов
/ 08 октября 2018

Используйте событие SelectionChanged и присвойте SelectedItem предыдущему selectedItem.

Свойства привязаны к свойству Dependency, и значение уже изменено в Dependency Property в данном сценарии.Сеттер не сможет вернуть значение в control/combobox, если вы не назначите его снова.

private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var comboBox = sender as ComboBox;
        var selctedItem = comboBox?.SelectedItem as TestModel;
        if (selctedItem != null && selctedItem.Equals("Test2"))
        {
            comboBox.SelectedItem = previousSelected;
        }
    }
...