2016-11-09 83 views
1

最好写在PRISM(Prism.Core 6.2,Prism.Windows 6.02),但我也想知道如何将命令绑定到UWP中的页面加载/加载事件与正常没有棱镜的MVVM。绑定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> 

在视图模型

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}" 

结合将得到编译错误“对象引用未设置对象的实例”。

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

如何正确绑定此命令?

回答

2

行为在UWP中也可用。只需添加Microsoft.Xaml.Behaviors.Uwp.Managed包,即可开始使用。

Microsoft.Xaml.Behaviors.Uwp.Managed 1.x版

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

Microsoft.Xaml.Behaviors.Uwp.Managed V2.X

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

它的工作原理,但有在''之前应该是''。在我将其标记为已接受的答案之前,您能否修复? – kurakura88

+0

你说得对,这似乎是版本1.x(我们仍在使用)和包2之间的变化。我已经在我的回答中发布了两个。 – Bart

+0

使用CommandParameter时,它总是返回null。任何帮助? –