Привязка Combobox к объекту Dictionary, но установка выбранного значения в коде за не вступает в силу - PullRequest
1 голос
/ 19 ноября 2011
<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, на самом деле ничего не делает для пользовательского интерфейса.

если бы кто-то мог указать мне правильное направление?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2011

Вам следует установить SelectedValuePath, если вы собираетесь использовать SelectedValue, предположительно Value. SelectedValue выполняет "выбор", поэтому тип вашего свойства также должен быть другим.

Если вы хотите сохранить все KeyValuePair, вам следует вместо этого связать SelectedItem.

1 голос
/ 30 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...