2014-11-10 2 views
0

Я связать DropDown статического словаря, который всегда, содержащий п> 0 записейBinding DropDown в словарь с невыполнением SelectedIndex

<ComboBox Grid.Row="1" Grid.Column="1" Margin="2,2,2,2" 
    ItemsSource="{Binding Localities}" 
    SelectedValuePath="Key" 
    DisplayMemberPath="Value" 
    SelectedValue="{Binding Locality, Mode=OneWayToSource}" 
    SelectedIndex="0" /> 

И это работает просто отлично, Dropdown заполнена и значение там, и если я выберите его, записывается свойство Locality.

Проблема, я не хотят не иметь «ничего» выбран, но свойство

SelectedIndex="0" 

не работает, как я ожидал.

Я всегда хочу, чтобы первый элемент был выбран после показа.

Я предполагаю, что это какая-то проблема с порядком, что привязка данных происходит после того, как был выбран выбор SelectedIndex?

+0

Покажите свое определение местностей и местностей – Paparazzi

+0

Вы устанавливаете свойство Locality при загрузке коллекции Localities? Свойство Locality вызывает событие PropertyChanged при его изменении? – jhenninger

ответ

0

Вы выбираете первый элемент в списке. Следовательно, первый элемент находится в индексе 0.

В результате этот элемент будет служить выбранным элементом.

Вместо этого рассмотрите возможность изменения выбранного индекса с «0» на «-1».

SelectedIndex="-1" 
+0

К сожалению, я, возможно, был неясен я _DO not_ хочу, что нет никакого действительного выбора в выпадающем списке (т.е. пустой) После отображения я хочу первый пункт уже был выбран –

+0

... О порядке. Вы пытались использовать наблюдаемую коллекцию? Создайте свойство ObservableCollection и бросьте словарь Dictionary.Values ​​внутри своего конструктора. –

0

ОК, я сделал это по-другому, и теперь он работает.

Раньше я был

SelectedValue="{Binding Locality, Mode=OneWayToSource}" 
SelectedIndex="0" /> 

И имущество implented как таковой:

public Object Locality 
{ 
    set 
    { 
    if(value != null) 
    { 
     LocalityInternal = (Int32)value; 
    } 
    } 
} 

Теперь я изменил его на

SelectedValue="{Binding Locality}" /> 

И просто заполнить значения если необходимо:

public Object Locality 
{ 
    get 
    { 
    if (LocalityInternal == -1) 
    { 
     return (0); //this is not the index in the combo box but a dictionary key! 
    } 
    else 
    { 
     return (LocalityInternal); 
    } 
    } 
    set 
    { 
    LocalityInternal = (Int32)value; 
    } 
}