ViewModels与MVVLight

时间:2015-03-15 21:43:56

标签: c# wpf xaml mvvm mvvm-light

我是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}}"创建的,但我想知道哪种方法对它有用?

0 个答案:

没有答案