2

ウィンドウがあり、MVVM ライト ツールキットを使用して Loaded イベントにバインドします。

    <Window 
      ...
      xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
      xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
      ...
      >

      <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
          <cmd:EventToCommand Command="{Binding Loaded, Mode=OneWay}" />
        </i:EventTrigger>
      </i:Interaction.Triggers>
    </Window>

私のビューモデルには、次のものがあります。

private ICommand _loaded;
public ICommand Loaded
{
  get
  {
    if (_loaded == null)
    {
      _loaded = CreateAsyncRelayCommand(p => OnLoaded());
    }
    return _loaded;
  }
}

public void OnLoaded()
{
  throw new NotImplementedException();
}

しかし、表示されているウィンドウでは、Loaded プロパティにブレークポイントを設定すると ICommand 変数が初期化されていますが、例外はスローされません。Initialized イベントを使用するように変更しようとしましたが、それでも同じです。これは、同じアプリにある別のウィンドウで正常に機能するため、すべてを正しく行っているとほぼ確信しています。何か不足している可能性がありますか? コード ビハインドでバインドすると正常に動作しますが、mvvm パターンに準拠したいと考えています。前もって感謝します。

4

1 に答える 1

0

コンストラクター内でコマンドを割り当ててみてください。

public ViewModel() {
    _loaded = CreateAsyncRelayCommand(p => OnLoaded());
}
于 2011-06-12T21:31:44.873 に答える