我有一个 ViewModel 和两个 View。如何从 ViewModel 导航到 View2。我在某处读到我们需要使用 PRISM,在 Silverlight 中从 ViewModel 打开多个视图。 PRISM 有什么替代方案吗?
理想情况下,您不想在视图模型中使用视图逻辑。您的视图模型不应该了解有关视图的任何信息。对于您的视图模型来说,设置一个属性让视图知道是时候进行导航是一个更好的主意。
这是一个例子:
视图模型:
using System.ComponentModel;
namespace ViewModels
{
public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged == null) return;
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private bool _DoneDoingStuff;
public bool DoneDoingStuff
{
get
{
return _DoneDoingStuff;
}
set
{
if (_DoneDoingStuff != value)
{
_DoneDoingStuff = value;
NotifyPropertyChanged("DoneDoingStuff");
}
}
}
}
}
View:
<navigation:Page
x:Class="Views.MyView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:vm="clr-namespace:ViewModels">
<navigation:Page.Resources>
<vm:MyViewModel
x:Key="MyViewModelInstance" />
</navigation:Page.Resources>
<Grid
x:Name="LayoutRoot"
DataContext="{Binding Source={StaticResource MyViewModelInstance}}">
<i:Interaction.Triggers>
<ei:DataTrigger
Binding="{Binding DoneDoingStuff}"
Value="True">
<ei:HyperlinkAction
NavigateUri="AnotherPage.xaml" />
</ei:DataTrigger>
</i:Interaction.Triggers>
</Grid>
</navigation:Page>
Use a DataTrigger
with Binding
属性设置为DoneDoingStuff
来自您的视图模型的属性,以及Value
属性设置为“True”。这DataTrigger
会在什么时候触发DoneDoingStuff
从您的视图模型设置为 true。
现在您需要一个触发操作来导航。使用HyperlinkAction
与NavigateUri
属性设置为您要导航到的页面。
一定要有系统.Windows.交互性, 系统.Windows.控件.导航, and 微软表达式交互参考文献中的程序集。
乍一看,这似乎太多了,但您的视图逻辑现在就在它需要的地方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)