gpt4 book ai didi

c# - MVVMLight 中的交互性问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:33 24 4
gpt4 key购买 nike

各位,我正在使用 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 状态未绑定(bind)到 enabled 属性 automatically。但对于您必须使用此模式的极少数情况,这应该不是问题,因为当您没有交互时,您通常没有视觉效果。

关于c# - MVVMLight 中的交互性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com