Не удается заставить ListBox и UpdateTarget работать - PullRequest
6 голосов
/ 11 сентября 2009

Вот соответствующие части файла XAML:

xmlns:local="clr-namespace:BindingTest"
<ListBox x:Name="myList"
         ItemsSource="{Binding Source={x:Static local:MyClass.Dic},
                               Path=Keys,
                               Mode=OneWay,
                               UpdateSourceTrigger=Explicit}">
</ListBox>

MyClass - это общедоступный статический класс, а Dic - это статическое общедоступное свойство, словарь.

В определенный момент я добавляю элементы в словарь и хотел бы, чтобы ListBox отражал изменения.
Это код, который я думал использовать, но он не работает:

BindingExpression binding;
binding = myList.GetBindingExpression(ListBox.ItemsSourceProperty);
binding.UpdateTarget();

Этот код вместо этого работает:

myList.ItemsSource = null;
myList.ItemsSource = MyClass.dic.Keys;

Я бы предпочел использовать UpdateTarget, но не могу заставить его работать.
Что я делаю не так?

1 Ответ

12 голосов
/ 11 сентября 2009

Связывание элементов обрабатывается несколько иначе, чем стандартное связывание DependencyProperty с в WPF (в частности, ItemsControl с).

Я думаю, вы хотите что-то вроде следующего:

var itemsView = CollectionViewSource.GetDefaultView(myListBox.ItemsSource);
itemsView.Refresh()

Это на самом деле ICollectionView объект, который вы хотите обновить. Это фактически тот объект, который управляет связыванием коллекции для вас. См. на странице MSDN для получения дополнительной информации.

...