我已经在.xaml文件后面的事件处理程序中看到了这一点,但是它似乎不会遵循MVVM模式:MainApplication.mainFrame.Navigate(new HomePage());
。是否有更好的方法可以在ViewModel中使用MVVM模式处理导航?还是在XAML?
答案 0 :(得分:8)
如果您正在寻找基于数据上下文显示不同的UserControl,那么只需了解以下简单的DataBinding和DataTemplate概念并对其进行扩展。 想象一下,你有一个名为CurrentViewModel的属性,它绑定到你窗口内ContentControl的内容
<Window ...
<ContentControl Content="{Binding CurrentViewModel}" />
</Window>
现在假设你有ViewModel类ClassA和ClassB,所以适当地将实例设置为CurrentViewModel并为你的类定义全局DataTemplates(Views)
<DataTemplate DataType="{x:Type vm:ClassA}">
<local:UserControlForA../>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ClassB}">
<local:UserControlForB../>
</DataTemplate>
现在可以从ViewModel逻辑自动控制View,WPF将负责通过Datatemplate显示UserControl。
如果您不熟悉MVVM,请更好地使用本文。 http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
答案 1 :(得分:2)
如果您在另一个班级中进行导航,我认为您尝试做的事情会更简单。见下文
public class FirstViewModel
{
}
public class SecondViewModel
{
}
public class NavigateViewModel
{
public ViewModelBase CurrentVieModel {get;set;}
public bool CanNavigate
{
get { return true;//Or Add some custom logic here determine if you can navigate}
}
public void Navigate()
{
//Just some arbitrary code
if(CurrentViewModel is FirstViewModel)
CurrentViewModel = new SecondViewModel();
}
}
现在就好了 1)将页面内容绑定到CurrentViewModel 2)将导航方法包装在ICommand中,然后设置
可能无法满足您的需求,希望有所帮助