我有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