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();
}
当我转到此页面时,不会加载此项。它不会引发活动。有人能帮我吗?
谢谢。。
据我所知,加载的事件发生在交互开始之前。因此,EventToCommand不能用于处理加载事件。在这种情况下,我通常会创建一个事件处理程序,从DataContext获取命令。然后计算命令的CanExecute方法,如果返回true,则调用Execute方法。
此模式与MVVM模式并不矛盾,并且在不能使用EventToCommand的情况下是一种干净的方法。然而,一个缺点是CanExecute状态没有绑定到启用的属性automaticall。但对于必须使用这种模式的罕见场景来说,这应该不是问题,因为当你没有交互时,你通常没有视觉效果。