使用ViewModel基于ViewModel属性更改视图

据我所知,在WPF中你可以这样做:

         

我的问题:有没有办法根据ViewModel中的属性选择View?

像这样的东西:

  //If property Selector==1    // If property Selector==2     

datatemplate选择器会这样做吗?

这里的教程

这是适用于您的场景的方式:

首先创建一个DataTemplateSelector:

 public class IronStageTemplateSelector : DataTemplateSelector { public DataTemplate IronStage1Template { get; set; } public DataTemplate IronStage2Template { get; set; } public object IronStage1Selector { get; set; } public object IronStage2Selector { get; set; } public override DataTemplate SelectTemplate(object selector, DependencyObject container) { if(selector == this.IronStage1Selector) { return IronStage1Template; } return IronStage2Template; } } 

我已经扩展了教程,以包含您可以为何时返回每个模板分配的属性。

声明XAML资源

        1 2   

在这个例子中,我们声明了我们的选择器,以便当我们的属性值为1时,返回template1,否则我们得到模板2。

将控制添加到XAML最后,需要一点点破解 – 您的VM属性需要是IEnumerable …

   

我希望这有帮助,如果你发现它有用,请标记为答案

编译时是否已知类型的视图模型属性? 如果是这样,您可以直接将控件添加到主(父)视图中,并将datacontext绑定到视图模型属性。

像这样的东西..

   

如果您有不同的情况,请告诉我。