2016-11-09 6 views
1

PRISM(Prism.Core 6.2、Prism.Windows 6.02)で書かれていますが、UWPのページロード/ロードされたイベントにコマンドをバインドする方法も知りたいですプリズムのないMVVM。 WPFではバインディングUWPページMVVMを使用したロード/ロード

、それがで達成可能である:

のViewModel

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

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> 

しかしUWPに、System.Windows.Interactivityは存在しません。単に

Loaded="{Binding LoadedCommand}" 

または

Loading="{Binding LoadingCommand}" 

と結合すると、エラー「オブジェクト参照がオブジェクトのインスタンスを設定していない」とコンパイルされます。

私がこれをやりたかったのは、ページがロードされている間(または、ViewModelコンストラクタ内にあることはできません)に実行する必要のある非同期メソッドがあるからです。私は簡単に後ろにコードで行うことができますが、これはMVVMではありません。

このコマンドを正しくバインドするにはどうすればよいですか?

答えて

2

ビヘイビアはUWPでも利用できます。 Microsoft.Xaml.Behaviors.Uwp.Managedパッケージを追加するだけですぐに使用できます。

Microsoft.Xaml.Behaviors.Uwp.Managed v1.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を返します。どんな助け? –

関連する問題