如何根据选择显示不同的控件

时间:2013-10-22 11:46:36

标签: wpf wizard

我有一个包含项目列表的用户控件。

如果选择了某个项目,我想用面板和一些按钮显示/替换视图,而不是。

当用户通过按下按钮或其他内容完成此视图时,我想再次恢复到列表并继续该过程。

基本上,这是一个向导。

怎么办?

抱歉,我忘了提到我正在使用MVVM。

解决方案:

感谢大家的帮助。我的测试应用程序没有工作,这促使我问SO。

我的测试应用程序无法运行,因为我错过了DataTemplate中的{x:type}。

简单地说:

我使用{x:Type}

在资源中创建了不同的datatemplates

我的viewmodel: 包含IWizardPageViewModel的复合集合。 包含currentPage属性。 包含NextCommand / BackCommand以更改currentPage

我将currentPage属性绑定到控件,并且datatemplates接管。

由于{x:Type},它无效。

我不知道这是对还是错,但是它起作用并且主要由视图模型控制,而不是视图上的触发器。

3 个答案:

答案 0 :(得分:0)

我想到的第一件事(也是最简单的)是使用Visibility属性并将其绑定到ViewModel中的一些布尔标志,这些标志将指示当前的UI状态。当然,在这种情况下,您应该应用转换器将bool值正确转换为Visibility这类转换器有很多例子。

但这仅适用于少量此类控制。如果要在视图中显示和替换很多UI元素,最好使用Prism之类的框架。从头开始它不会那么简单,但是你会感受到所有的灵活性。

如果你没有关注MVVM文化(或者你不喜欢这样的支持属性),你可以绑定应该是的 A Visibility属性显示为元素 B Booleaen属性,代表显示/隐藏逻辑。说清楚:

<TextBlock x:Name="A" Visibility="{Binding IsChecked, ElementName=B, Converter={StaticResource boolToVisibilityConverter}}" Text="Some text."/> 
<ToggleButton x:Name="B" IsChecked="False"/>

答案 1 :(得分:0)

您可以使用“触发器”和“选择器”根据用户操作更新视图(DataTemplate)。 如果您需要相同的代码段,请告诉我们。

答案 2 :(得分:0)

考虑一个usercontrol列表 - 每个向导页面一个。顶级用户控件(向导控件)将拥有此列表。对于导航,您可以;