我是MVVM Light的新手。我尝试用MVVM Light Framework编写一个项目,我有一些问题。我已经定义了我的MainWindow.xaml:
MainWindow.xaml:
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<Button Height="30" Width="40" Command="{Binding OpenNews}">News</Button>
<Button Height="30" Width="40" Margin="5,0,0,0" Command="{Binding OpenTeams}">Teams</Button>
</StackPanel>
<ContentPresenter Grid.Row="1" Content="{Binding CurrentViewModel}"/>
</Grid>
MainViewModel:
包含两个RelayCommands
OpenNews和OpenTeams。还有CurrentViewModel属性。此属性包含ViewModel,具体取决于用户单击的选项(NewsViewModel或TeamsViewModel)。我这样做:
private void ShowOpenTeams()
{
CurrentViewModel = ServiceLocator.Current.GetInstance<TeamsViewModel>(); //MainViewModel.TeamsViewModel;
}
private void ShowOpenNews()
{
CurrentViewModel = ServiceLocator.Current.GetInstance<NewsViewModel>();
}
App.xaml中: 我已经定义了ViewModel的DataType和应该显示的View之间的关系。
<Application.Resources>
<DataTemplate DataType="{x:Type vm:NewsViewModel}">
<view:NewsView/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:TeamsViewModel}">
<view:TeamView/>
</DataTemplate>
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
</Application.Resources>
问题是:在这种情况下,为什么我需要ViewModelLocator?使用ViewModelLocator使用这种方法有意义吗?我没有看到任何好处......
MVVM Light中的视图是使用此关系DataContext="{Binding ViewModelName, Source={StaticResource Locator}}"
创建的,但我想知道哪种方法对它有用?