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