Поле со списком в Silverlight 4 - PullRequest
0 голосов
/ 14 июля 2011

У меня есть поле со списком, которое связано с коллекцией, которая по сути является списком пар имя / значение. Коллекция может иметь несколько элементов с разными именами, но значения могут быть одинаковыми.

public class NameValuePair
{
   public string Name { get; set; }
   public string Value { get; set; }
}

public class NameValuePairCollection : List<NameValuePair>
{
   public NameValuePairCollection(): base() { }
}

Итак, внутри моего пользовательского элемента управления у меня есть личное поле с именем items, которое является экземпляром этой коллекции NameValuePair:

private NameValuePairCollection items = new NameValuePairCollection()

Где-то вдоль линии, что коллекция инициализируется и элементы добавляются к ней. Однако проблема, которую я вижу, состоит в том, когда я пытаюсь установить выбранный индекс поля со списком, который привязан к этой коллекции:

this.CboItemsSelector.SelectedIndex = 3;

или

this.CboItemsSelector.SelectedItem = this.items[3];

Выбранный элемент есть, но пользовательский интерфейс не синхронизирован. Селектор пользовательского интерфейса по умолчанию по-прежнему относится к первому элементу в списке, даже несмотря на то, что свойства Имя и Значение SelectedItem СДЕЛАТЬ В СООТВЕТСТВИИ СООТВЕТСТВУЮЩЕМУ тому, что находится в индексе 3 базовой коллекции!

Есть идеи, как заставить ComboBox обновляться? Или просто исправить проблему? Я знаю, что это довольно маленькая проблема, но она достаточно велика, чтобы заставить меня переписать немного кода .... :( :(: (

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Соответствуют ли свойства Name и Value выбранного элемента или SelectedItem - экземпляр из той же коллекции? .Net не узнает, как сравнивать элементы по имени и значению, если вы не сообщите об этом, иначе он будет использовать равенство объектов, чтобы попытаться найти элемент в вашем списке. Если вы устанавливаете для выбранного элемента экземпляр, которого на самом деле нет в списке (но у которого есть те же свойства), .net не найдет его в списке. У вас есть 2 варианта, переопределить равенство для вашего объекта и принудительное сравнение свойств или убедиться, что вы всегда устанавливаете выбранный элемент на элемент в списке. Также попробуйте то, что предложил Энди Мэй, и сделайте двухстороннее связывание на ItemsSource и SelectedItem, должно работать тогда

1 голос
/ 15 июля 2011

Вам нужно наследовать от ObservableCollection, а не от List. В противном случае события OnPropertyChanged не будут запущены, и связанный элемент управления не будет знать, что данные были обновлены.

...