绑定UWP页面加载/加载命令与MVVM

本文关键字:加载 命令 MVVM 绑定 UWP | 更新日期: 2023-09-27 18:17:14

最好用PRISM (PRISM。Core 6.2, Prism。Windows 6.02),但我也想知道如何将命令绑定到页面加载/加载事件在UWP与正常的MVVM没有棱镜。

在WPF中,可以使用:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding LoadedCommand}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

在ViewModel

public ICommand LoadedCommand { get; private set; }
public TheViewModelConstructor()
{
     LoadedCommand = new DelegateCommand(Load);
}
private async void Load()
{
    // Do stuff
}

但是在UWP中,System.Windows.Interactivity不存在。只需绑定

Loaded="{Binding LoadedCommand}"

Loading="{Binding LoadingCommand}"

将得到编译错误"Object reference not set an instance of an Object "。

我想这样做的原因是因为有一个异步方法需要在页面加载期间或之后完成(它不能在ViewModel构造函数内)。我可以用后面的代码很容易地做到这一点,但这不是MVVM。

如何正确绑定此命令?

绑定UWP页面加载/加载命令与MVVM

行为也可以在UWP中使用。只需添加Microsoft.Xaml.Behaviors.Uwp.Managed包,您就可以准备好了。

Microsoft.Xaml.Behaviors.Uwp。管理v1.x

<interactivity:Interaction.Behaviors>
    <core:EventTriggerBehavior EventName="Loaded">
        <core:InvokeCommandAction Command="{Binding ViewLoadedCommand}" />
    </core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>

Microsoft.Xaml.Behaviors.Uwp。管理需

<interactivity:Interaction.Behaviors>
    <core:EventTriggerBehavior EventName="Loaded">
        <core:EventTriggerBehavior.Actions>
            <core:InvokeCommandAction Command="{Binding ViewLoadedCommand}" />
        </core:EventTriggerBehavior.Actions>
    </core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>