【发布时间】:2012-10-15 10:54:43
【问题描述】:
我已经搜索并尝试了几天,最后必须在这里提出问题。 我有一个 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绑定到按钮,然后实例化相应视图的新视图模型。 即:
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/
Loading Views into ContentControl and changing their properties by clicking buttons
但它们并没有解决我的问题,或者我不太明白如何实际显示视图。:-(
那么有人对如何使用 GalaSoft 的 MVVM Light 在 Silverlight 5 中正确切换视图有很好的解释。
谢谢
【问题讨论】:
-
在CallTestView1Command中首先设置CurrentView = null;然后给它分配新的项目,它也许可以解决这个问题
标签: silverlight view mvvm-light silverlight-5.0