最好使用PRISM(Prism.Core 6.2,Prism.Windows 6.02)编写,但我也想知道如何在UWP中使用普通MVVM将Command绑定到页面加载/已加载事件上,不需要使用Prism。
在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。
如何正确绑定此命令?