<Combobox ItemsSource="{Binding Path=Delimiters}" DisplayMemberPath="Key"
SelectedValue="{Binding Path=SelectedDelimiter, UpdateSourceTrigger=PropertyChanged}" />
это мой комбобокс, созданный в xaml
здесь приведены соответствующие привязки в модели представления со словарем, заполненным в конструкторе.
private IDictionary<string,string> _delimiters;
public IDictionary<string,string> Delimiters
{
get{return _delimiters;}
set{_delimiters = value; RaisePropertyChanged("Delimiters");}
}
private KeyValuePair <string, string> _selectedDelimiter;
public KeyValuePair <string, string> SelectedDelimiter
{
get{return _selectedDelimiter;}
set{
if(value.Key != _selectedDelimiter.Key || value.Value != _selectedDelimiter.Value)
{
var prevDelimiter = _selectedDelimiter;
_selectedDelimiter = value;
if(IllegalDelimiter.Contains(_selectedDelimiter)
{
MessageBox.Show("errror", "error");
_selectedDelmiter = prevDelimiter;
}
RaisePropertyChanged("SelectedDelimiter");
}
}
}
В основном у меня проблемы с привязкой выбранного значения обратно. словарь становится связанным, и когда я изменяю поле со списком пользовательского интерфейса, настройка запускается правильно. В операторе if, чтобы проверить, является ли он недопустимым разделителем, он возвращает выбранное значение к его первоначальному значению в коде позади, но он не заполняется в пользовательском интерфейсе выпадающего списка (я вижу срабатывание аксессора get из пользовательского интерфейса). это как установка selectedvalue, на самом деле ничего не делает для пользовательского интерфейса.
если бы кто-то мог указать мне правильное направление?