2009-09-21 2 views
0

У меня есть простой словарь, определяемый как ResultOptions = new Dictionary<char, string>, а моя модель просмотра имеет общедоступное свойство ResultCode типа char. Моя XAML выглядит следующим образом:Невозможно установить начальное значение при привязке данных привязки к словарю <char,string>

<ComboBox ItemsSource="{Binding ResultOptions}" 
          DisplayMemberPath="Value" 
          SelectedValuePath="Key" 
          SelectedValue="{Binding ResultCode}" /> 

Все работает прекрасно, за исключением ComboBox никогда не инициализируется на основе значения SelectedValue. Я уверен, что привязка правильная, так как я могу видеть, что ResultCode в viewmodel установлен правильно.

Странная вещь ... если я изменю свою модель, чтобы ResultCode имел тип 'string', а мой словарь - Dictionary<string,string>, то выпадающая скобка инициализируется правильно на основе SelectedValue.

Что мне не хватает? почему является обязательным для Dictionary<string, string> работ, но привязка к Dictionary<char, string> нет?

ответ

2

Одно из различий между двумя случаями состоит в том, что char является типом значения, а string является ссылочным типом. Скорее всего, внутри WPF использует объекты для привязок, и каждый раз, когда принимается char, он помещается в новый объект, поэтому проверка ссылочного равенства не выполняется.

Я бы сказал, что просто используйте string как ваш ключ, так как нет никакого способа обойти, как работает бокс.

+0

Спасибо! На данный момент мы решили использовать строку в качестве ключа. – 2009-09-22 18:13:30

+0

Вы должны пометить этот ответ как принятый, если он ответит на ваш вопрос, чтобы вопрос больше не отображался, поскольку он не принимал ответ. – Andy

Смежные вопросы