我有2个DataTemplates用于在单个ListView中显示ClassA或ClassB的内容;要选择的模板将基于用户的RadioButton选择。在运行时动态更改ListView的DataTemplate
是否可以根据用户输入在运行时动态地更改ListView(在XAML中)的ItemTemplate?
的代码示例片段:
XAML页面:
<Page...>
<Page.Resources>
<DataTemplate x:Key="ClassAListViewItemTemplate" x:DataType="vm:ClassA" ... />
<DataTemplate x:Key="ClassBListViewItemTemplate" x:DataType="vm:ClassB" ... />
</Page.Resources>
<RelativePanel>
<RadioButton Content="ClassA" ... />
<RadioButton Content="ClassB" ... />
<ListView DataContext="{Binding Path=MainViewModel}"
ItemsSource="{Binding ListOfClassAOrB, Mode=TwoWay}"
ItemTemplate="{StaticResource ClassAListViewItemTemplate}"/>
</RelativePanel>
</Page>
我已经剥离的代码下来多少有点要领,但我希望能够在运行时更改如下:
ItemTemplate="{StaticResource ClassAListViewItemTemplate}"
我已经看到了使用Style.Triggers经典WPF应用的解决方案,但这些都不适用于UWP
马可Minerva的使用的DataTemplates内用户控件修改使用Adaptive触发器的可视状态的Adaptive Triggers, RelativePanel and DataTemplate in the Universal Windows Platform会谈的博客,但是这并没有考虑到基于用户输入的模板切换出
最接近的答案我已经找到对我的问题是另一个博客,他写了“Dynamically choose DataTemplate in WinRT”,其中涉及代码隐藏元素 - 但它似乎只是一个if语句 - 但它迄今为止我遇到的最干净的解决方案,以及我想要的复制到XAML中
谢谢
也许[此问题](http://stackoverflow.com/q/33465775/2681948)及其答案将有所帮助。 – Romasz
嗨Romasz,感谢您的回复,但是您建议的问题/答案仍然需要创建一个DataTemplateSelector的子类,其中包含逻辑 - 我更多地寻找避免陷入C#代码的解决方案 - 如果这甚至是可能的话。 DataTemplateSelector子类唯一添加的是If语句,我认为可能有一个简洁的方法来在XAML中执行它 – Alastair
我需要的是类似于[此问题]接受的答案的解决方案(http://stackoverflow.com/questions/146269/change-wpf-datatemplate-for-listbox-item-if-selected)但不使用样式触发器,因为它们在UWP中不可用 – Alastair