我是使用WPF的新手,我想看看在使用MVVM Light Toolkit的WPF应用程序中浏览多个屏幕时,人们推荐的最佳做法。作为WPF的新手,如果我的术语不正确,请原谅我,因为我不确定正确的术语是“切换视图”,“导航页面”,“更改窗口”或其他内容(这些术语的说明与WPF将不胜感激。)
澄清我想要做的事情:我有一个应用程序有3个全屏页面/视图,用户应该可以来回移动。这些视图永远不会同时显示,因此最容易与选项卡控件中的选项卡进行比较;除了我不想要标签控件通常附带的标签条。相反,我想以编程方式在页面/视图之间切换。
我已经看到了几种不同的方法,在以下堆栈中的流程答案:
所以我真的只是想知道上述方法中的哪一个是我应该进入的方向?我已经实际实现了第一个答案,但我不确定这是否是数据模板的“滥用”/“黑客”,或者这是否应该如何使用框架。
最后,如果其他工具包提供开箱即用的功能,MVVM Light可能不是我可以使用的最合适的工具包。任何人都可以阐明这个概念,并推荐一个更合适的工具包吗?
谢谢,
答案 0 :(得分:1)
一个快速而肮脏的导航示例(这是在这里写的,而不是在VS中,所以如果拼写错误,请应用修复程序):
让我们创建视图的层次描述:
public abstract Class ViewModelBase : INotifyPropertyChanged{}
public abstract Class ViewModelNavigationBase : ViewModelBase {}
public Class ViewModel1 : ViewModelNavigationBase {}
public Class ViewModel2 : ViewModelNavigationBase {}
public Class ViewModel3 : ViewModelNavigationBase {}
public Class MainViewModel : ViewModelBase
{
private ViewModelNavigationBase currentViewModel;
public ViewModelNavigationBase CurrentViewModel
{
get{return currentViewModel;}
set
{
currentViewModel = value;
OnPropertyChanged("CurrentViewModel");
}
}
private const int numberOfPages = 3 ;
private int index;
private ViewModelNavigationBase[numberOfPages] pages;
....
... OnNavigateCommand()
{
index++;
index = index % numberOfPages;
CurrentViewModel = pages[index];
}
}
资源:
<local:MainViewModel x:Key="MainVm" />
<DataTemplate TargetType={x:Type local:ViewModel1}>
<local:View1 />
</DataTemplate>
<DataTemplate TargetType={x:Type local:ViewModel2}>
<local:View2 />
</DataTemplate>
<DataTemplate TargetType={x:Type local:ViewModel3}>
<local:View3 />
</DataTemplate>
xaml:
<Window x:Name="MainWindow"
DataContext={StaticResource MainVm}>
<StackPanel>
<ContentControl Content={Binding CurrentViewModel} />
<Button Content="Navigate" Command="{Binding NavigateCommand}"/>
</StackPanel>
</Window>
答案 1 :(得分:1)
我在这个问题中真正想要的是一个参考资料,显示我列出的两种方法中的一种实际上是常用的,并且是一种可靠的方法。
我终于偶然发现了这个:http://msdn.microsoft.com/en-us/library/gg405484%28v=PandP.40%29.aspx
这为您的视图模型提供了第一种使用数据模板的方法。