WPF:基于UserControl数据切换模板

时间:2009-06-04 16:06:28

标签: wpf templates

尝试实现我认为简单的概念。我有一个绑定到视图模型的用户控件(视图),它提供了一个数据列表。我在用户控件中添加了切换按钮,并希望允许用户使用这些切换按钮来切换用于显示数据的模板。用于数据的所有模板都工作,它们彼此非常不同,因此它不仅仅是对单个模板的简单更改。我想在XAML中尽可能多地获得它。

这就是我现在所拥有的:

数据出现的地方我有<UserControl Template="{StaticResource ListSwitchingControlTemplate}" />

在该控件模板中,我拥有所有“子模板” - 实际上它只是所有3个表示,其可见性设置为Collapsed。然后我在该控件模板上使用数据触发器来显示当前选定的视图。这是有效的,但我注意到所有3个表示都受到约束 - 它们各自表现得像它们一样活跃(我猜它们就是这样)。

我宁愿能够在运行时真正切换模板。我尝试将包含用户控件转换为自己使用ContentTemplate,但这只是弄乱了我在其他地方的所有绑定。如果只有UserControls可以使用DataTriggers,我会没事的。

有关如何干净利落地获取此行为的任何建议。我有一个想法,我只是错过了一些简单的东西。

谢谢, 戴夫

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

执行此操作的一种方法是使用DataTemplateSelector。

基本上,您创建一个继承自DataTemplateSelector的类并覆盖其SelectTemplate虚函数。函数的返回值是您要使用的DataTemplate,在该函数中,您可以访问对象及其属性,您可以使用它来决定选择哪个模板。

MSDN上有一个例子:

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx