WPF - обновить содержимое DataTemplate - PullRequest
4 голосов
/ 16 декабря 2009

У меня есть вкладка, содержимое которой настроено на объект (рабочий элемент TFS). У меня есть DataTemplate для типа WorkItem.

Когда я помещаю объект на вкладку, он хорошо отображается.

Однако, когда я обновляю одну из коллекций объекта (список ссылок), это изменение не обновляется в представлении.

Я попытался сделать свой WorkItem объектом DependencyProperty, а также попытался установить значение содержимого вкладки в null, а затем снова в мой объект (в надежде, что он перезагрузит его).

Ничего из этого не работает.

Обычно я бы просто использовал наблюдаемую коллекцию для хранения ссылок, но, поскольку у меня нет класса WorkItem, мне нужно другое решение, которое будет вручную обновлять DataTemplate.

Есть идеи?

1 Ответ

4 голосов
/ 16 декабря 2009

Чтобы принудительно привязать обновление пользовательского интерфейса, вызовите BindingExpression.UpdateTarget. Чтобы получить выражение привязки для данного элемента (в вашем случае я предполагаю ItemsSource), используйте BindingOperations.GetBindingExpression. Э.Г.

BindingExpression bindingExpr = BindingOperations.GetBindingExpression(linksListBox, ListBox.ItemsSourceProperty);
bindingExpr.UpdateTarget();  // refreshes the ItemsSource

Однако это зависит от наличия ссылки на элемент управления, свойство которого связано, что может быть затруднительно, если элемент управления находится в шаблоне данных. Вы можете попробовать выполнить UpdateTarget () для любого элемента управления, на котором размещается DataTemplate (вкладка?), А какое-либо свойство связано с WorkItem (свойство Content?), Но я не проверял это. (Мне было бы интересно узнать, работает ли это!)

...