В нашем приложении у нас есть очень большой набор данных, который действует как наш словарь данных для списков ComboBox и т. Д. Эти данные статически кэшируются и хранятся из двух переменных, поэтому я подумал, что было бы разумно написать элемент управления, полученный из ComboBox и выставил 2 клавиши как DP. Когда эти 2 ключа имеют правильные значения, я автоматически устанавливаю ItemsSource ComboBox из списка словаря данных, которому он соответствует. Я также автоматически установил SelectedValuePath и DisplayMemberPath в конструкторе на Code и Description соответственно.
Вот пример того, как всегда выглядит элемент в ItemsSource из списка словаря данных:
public class DataDictionaryItem
{
public string Code { get; set; }
public string Description { get; set; }
public string Code3 { get { return this.Code.Substring(0, 3); } }
}
Значение кода всегда составляет 4 символа, но иногда мне нужно связать его только с 3 символами. Следовательно, свойство Code3.
Вот как выглядит код в моем настраиваемом комбинированном списке для установки ItemsSource:
private static void SetItemsSource(CustomComboBox combo)
{
if (string.IsNullOrEmpty(combo.Key1) || string.IsNullOrEmpty(combo.Key2))
{
combo.ItemsSource = null;
return;
}
List<DataDictionaryItem> list = GetDataDictionaryList(combo.Key1, combo.Key2);
combo.ItemsSource = list;
}
Теперь моя проблема в том, что когда я изменяю SelectedValuePath в XAML на Code3, он не работает. То, что я связываю с SelectedValue, все еще получает полный 4-символьный код из DataDictionaryItem. Я даже попытался перезапустить SetItemsSource, когда SelectedValuePath был изменен, а кубики отсутствуют.
Может кто-нибудь увидеть, что мне нужно сделать, чтобы мой настраиваемый комбинированный список проснулся и использовал предоставленный SelectedValuePath, если он переопределен в XAML? Настраивать значение в установщике свойств в моем привязанном бизнес-объекте SelectedValue нельзя.
Вот как выглядит XAML для моего комбинированного списка в форме:
<c:CustomComboBox Key1="0" Key2="8099" SelectedValuePath="Code3" SelectedValue="{Binding Thing}"/>
РЕДАКТИРОВАТЬ : я просто запустил snoop для своего кода, и он говорит, что мой SelectedValuePath - это код ... он, кажется, никогда не устанавливается на Code3 ... Зах?