MVVMLight中的交互问题

时间:2012-02-10 12:29:06

标签: c# mvvm-light

每个人,我正在使用WPF开发一个MVVMLight应用程序但我的问题是我想在用户加载页面后触发Loaded事件。对于例如我有一些导航页面,因此每当用户点击任何页面时,都应该触发PageLoaded事件。但就我而言,它并没有以同样的方式解雇。我有另一页工作得非常好。我不知道我在哪里弄错了。

我的Xaml代码如下所示:

    xmlns:vm="clr-namespace:Test.User.Facebook.ViewModel"
<UserControl.Resources>
    <ResourceDictionary>
       <vm:ViewModelLocator x:Key="Locator"/>
     </ResourceDictionary>
</UserControl.Resources>


<UserControl.DataContext>
    <Binding Source="{StaticResource Locator}" Path="FriendsList"/>
</UserControl.DataContext>


<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <cmd:EventToCommand Command="{Binding LoadedCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

ViewModel看起来像这样:

public RelayCommand LoadedCommand { get; private set; }
public FriendsListViewModel()
{
    LoadedCommand = new RelayCommand(() => UserControlLoaded());
}

private void UserControlLoaded()
{
    GetFriendsList();
}

进入此页面时未加载。它不会触发事件。有人可以帮帮我吗?

谢谢..

1 个答案:

答案 0 :(得分:0)

据我所知,加载的事件发生在交互开始之前。因此,EventToCommand不能用于处理load事件。在这种情况下,我通常会创建一个事件处理程序,它从DataContext获取命令。然后评估命令的CanExecute方法,如果返回true,则调用Execute方法。

这种模式与MVVM模式不矛盾,并且在不能使用EventToCommand的情况下是一种干净的方式。但是,一个缺点是CanExecute状态未绑定到enabled属性automaticall。但是对于你必须使用这种模式的罕见情况来说,这不应该是一个问题,因为当你没有互动时,你通常没有视觉效果。