MVVMLight中的交互性问题

本文关键字:问题 交互性 MVVMLight | 更新日期: 2023-09-27 18:23:56

大家好,我正在使用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();
}

当我转到此页面时,不会加载此项。它不会引发活动。有人能帮我吗?

谢谢。。

MVVMLight中的交互性问题

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

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