【发布时间】:2015-07-07 13:34:34
【问题描述】:
我无法在运行时更新列表中单个项目的 DataTemplate。详细地说,这是我想要完成的。
我有一个列表框,其中的项目可以有不同的状态(折叠、展开、禁用等),每个都有不同的布局。我正在使用 TemplateSelector 根据我的类上的属性选择正确的 DataTemplate ,当我第一次创建列表时效果很好,项目显示正确。但是,当我在运行时更改设置 DataTemplate 的属性时,会调用 NotifyPropertyChanged 并更新列表中的项目信息,但不会更新 DataTemplate。例如:我有一个带有标签 X 的折叠项目,我想展开它。我单击该项目,标签更改为 Y,但 DataTemplate 没有更新。
知道如何做到这一点吗?除非是针对整个列表,否则不能在运行时更新 DataTemplate 吗?
我将不胜感激。
【问题讨论】:
-
猜对了,但您发现的不是正确的。我相信您的问题的解决方案是使用 DataTrigger 更改模板来回答这个问题stackoverflow.com/questions/8715315/…。 DataTriggers 在 INPC 属性更改时……触发……。看看这是否正确,如果是,我们可以将其标记为骗子(这不是一件坏事!)。
-
感谢您的帮助@Will,但该问题的解决方案不起作用。我收到错误消息:“在类型 'Style' 中找不到可附加属性 'Triggers'。”。无论如何我可以强制重新渲染列表项以更新数据模板吗?
-
WP 风格的 WPF 必须有一个类似的版本。不幸的是,我不知道那是什么。但这就是你的解决方案。
-
嗯,这不是您问题的直接答案。但是,很好地解决了您的问题。制作
UserControl并在您的数据模板中使用它。现在,要更改状态,您可以在此UserControl上调用方法,它会更新。您也可以通过情节提要使用动画。 -
@CodetrixStudio,谢谢!那解决了!我是新来的,所以您应该将其作为答案提交以便我接受吗?
标签: c# windows-phone-8 listbox datatemplate datatemplateselector