【问题标题】:WPF - Refresh contents of a DataTemplateWPF - 刷新数据模板的内容
【发布时间】:2009-12-15 22:42:21
【问题描述】:

我有一个标签,它的内容设置为一个对象(一个 TFS 工作项)。我有一个 WorkItem 类型的 DataTemplate。

当我将对象设置为选项卡时,它会很好地显示。

但是,当我更新对象上的其中一个集合(链接列表)时,此更改不会刷新到视图。

我尝试将我的 WorkItem 设置为 DependencyProperty,并且我还尝试将选项卡内容的值设置为 null,然后再次设置为我的对象(希望它会重新加载它)。

这些都不行。

通常我只会使用一个可观察的集合来存储链接,但由于我不拥有 WorkItem 类,我需要一个不同的解决方案来手动刷新 DataTemplate。

有什么想法吗?

【问题讨论】:

    标签: wpf data-binding datatemplate


    【解决方案1】:

    要强制绑定刷新 UI,请调用 BindingExpression.UpdateTarget。要获取给定元素的绑定表达式(在您的情况下,我假设一个 ItemsSource),请使用 BindingOperations.GetBindingExpression。例如

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

    但是,这依赖于对属性绑定的控件的引用,如果控件位于 DataTemplate 中,这可能会很困难。您可以尝试在托管 DataTemplate(Tab?)的任何控件以及绑定到 WorkItem(Content 属性?)的任何属性上执行 UpdateTarget(),但我尚未对此进行测试。 (我很想知道它是否有效!)

    【讨论】:

    • 做到了!谢谢!我会提醒未来的搜索者,第一行中的方法调用应该是“GetBindingEpxression”而不是“GetBinding”
    • 哎呀!感谢 Vaccano,已修复!
    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2011-07-19
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多