0

我正在尝试使用 EventToCommand 来初始化我的 ViewModel,但该命令没有触发。我怀疑这是因为 Triggers 部分不在数据绑定容器中,但在我的示例中如何做到这一点?如果可能的话,我会尝试直接使用 XAML。

<Window x:Class="MVVMSample.Home"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:viewModels="clr-namespace:MVVMSample.ViewModels"
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
        xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
        d:DataContext="{d:DesignInstance Type=viewModels:HomeViewModel, IsDesignTimeCreatable=True}"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <viewModels:HomeViewModel x:Key="ViewModel" x:Name="ViewModel" />
    </Window.Resources>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <cmd:EventToCommand Command="{Binding LoadedCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <Grid DataContext="{StaticResource ViewModel}">
        <TextBlock Text="{Binding PersonCount}" />
    </Grid>
</Window> 
4

1 回答 1

1

你是对的,数据上下文是问题的一部分,但我会按照设计使用 mvvm-light 来解决它。

如果您使用的是 MVVM_Light,那么您应该使用视图模型定位器。它是框架的主要支柱。我使用mvvm light学习了mvvm原理。我非常喜欢它,因为它很简单,让我能够以尽可能快的学习曲线进行学习。

在 mvvm-light 中,您在 app.xaml 中声明您的 viewmodellocator

<Application.Resources>
    <ResourceDictionary>
        <!--Global View Model Locator-->
        <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
    </ResourceDictionary>               
</Application.Resources> 

然后在您的视图中(无论是用户控件还是窗口等),您将视图模型“附加”到您的视图,如下所示:注意 DataContext 声明。

<UserControl x:Class="FTC.View.TrackingListView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
            xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
            xmlns:cmd="http://www.galasoft.ch/mvvmlight"
            mc:Ignorable="d" 
            DataContext="{Binding YourViewModel, Source={StaticResource Locator}}"
            d:DesignHeight="700" d:DesignWidth="1000">

这样,来自 mvvm light 的视图模型定位器可以根据需要创建视图模型的单例或唯一实例。它还可以使用 IOC 将服务注入到视图模型的构造函数中。

例如,如果我有一个处理来自数据模型的人员对象的视图模型,我创建一个执行 CRUD 操作的人员服务,然后在视图模型构造函数参数中引用它。这允许我使用假的设计时数据或模型中的真实数据。它还使所有关注点解耦,这就是 mvvm 的目的。

我建议阅读更多关于 MVVM-light 框架的信息,并从他们的网站 galasoft 构建样本之一。

看这个视频

希望这可以帮助

于 2013-05-19T20:19:55.633 回答