我已经搜索并尝试了几天,最后必须在这里提出问题。我有一个 Silverlight 5 应用程序,使用 MVVM Light,我希望能够在主视图中动态切换视图。
为了简单起见,假设我有 2 个按钮。
Button1 将切换到 TestView1。
Button2 将切换到 TestView2。
<Button Content="TestView1" Grid.Column="1" Command="{Binding CallTestView1Command}" HorizontalAlignment="Left" Margin="185,17,0,0" VerticalAlignment="Top" Width="75"/>
<Button Content="TestView2" Grid.Column="1" Command="{Binding CallTestView2Command}" HorizontalAlignment="Left" Margin="280,17,0,0" VerticalAlignment="Top" Width="75"/>
我这样做的方法是将relaycommand绑定到按钮,然后实例化相应视图的新视图模型。IE:
private RelayCommand _callTestView1Command;
public RelayCommand CallTestView1Command
{
get
{
return _callTestView1Command ??
(_callTestView1Command = new RelayCommand(() =>
{
CurrentView = ViewModelLocator.NinjectKernel.Get<TestViewModel1>();
}));
}
}
然后将 CurrentViewmodel 设置为新的视图模型。在 MainView 中,我已将 CurrentView 绑定到 ContentControl:
<Border x:Name="displayedView" Grid.Row="2">
<ContentControl Content="{Binding CurrentView}" />
</Border>
这实际上会在某种程度上起作用,因为 CurrentView 会发生变化,但它不会实际显示视图的内容,它只是显示实例化的 ViewModel 的命名空间。
到目前为止,我主要使用了从这些来源获得的知识:
http://rachel53461.wordpress.com/2011/05/28/switching-between-viewsusercontrols-using-mvvm/
将视图加载到 ContentControl 并通过单击按钮更改其属性
但他们并没有解决我的问题,或者我不太明白如何实际显示视图。:-(
那么有人对如何使用 GalaSoft 的 MVVM Light 在 Silverlight 5 中正确切换视图有很好的解释。
谢谢