我有一个包含项目列表的用户控件。
如果选择了某个项目,我想用面板和一些按钮显示/替换视图,而不是。
当用户通过按下按钮或其他内容完成此视图时,我想再次恢复到列表并继续该过程。
基本上,这是一个向导。
怎么办?
抱歉,我忘了提到我正在使用MVVM。
解决方案:
感谢大家的帮助。我的测试应用程序没有工作,这促使我问SO。
我的测试应用程序无法运行,因为我错过了DataTemplate中的{x:type}。
简单地说:
我使用{x:Type}
在资源中创建了不同的datatemplates我的viewmodel: 包含IWizardPageViewModel的复合集合。 包含currentPage属性。 包含NextCommand / BackCommand以更改currentPage
我将currentPage属性绑定到控件,并且datatemplates接管。
由于{x:Type},它无效。
我不知道这是对还是错,但是它起作用并且主要由视图模型控制,而不是视图上的触发器。
答案 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列表 - 每个向导页面一个。顶级用户控件(向导控件)将拥有此列表。对于导航,您可以;
interface
页面。或许IWizardPage
?