1

我有一个 GridView 作为 SemanticZoom 控件中的缩小视图。此 GridView 使用自定义 DataTemplateSelector 作为 ItemTemplateSelector。它为我的应用显示的每个内容组显示一个项目。

模板根据组是否为空而有所不同。这在加载时可以正常工作,但是当组变空或停止为空时它不会更新。

我发现 ItemTemplateSelector 仅在页面首次显示时运行。如何强制 DataTemplateSelector 再次运行。

有关此主题的 WPF 问题都建议使用触发器,但这些在 WinRT XAML 中不可用。

4

2 回答 2

1

我找到了一个类似 WPF 问题的答案,它以在 WinRT 中有效的方式回答了这个问题:

https://stackoverflow.com/a/11327087/31569

基本上,您将 ItemTemplateSelector 设置为 null,然后再次设置。像这样:

var templateSelector = MyGroupView.ItemTemplateSelector;
MyGroupView.ItemTemplateSelector = null;
MyGroupView.ItemTemplateSelector = templateSelector;

这可行,但很高兴被告知是否有更好的方法来做到这一点。

于 2012-11-17T14:27:11.853 回答
1

我发现从集合中删除需要更新的项目并将其添加回来更容易。这会强制 GridView 或 ListView 应用模板。这在 MVVM 世界中很容易做到。

var itemToReload; //The object who's template needs updating
var reloadIndex  = this.SomeCollection.IndexOf(itemToReload);

this.SomeCollection.Remove(itemToReload);
this.SomeCollection.Insert(reloadIndex, itemToReload);

需要注意的一点是,如果该项目是“已选择”项目,则您需要重新应用该选择。

于 2014-11-13T00:38:57.827 回答