2016-11-21 2 views
0

ファイルメニューの標準の「最新ファイル」オプションを実装しようとしています。以下のコードはオプションのリストを正しく示していますが、fileNameを含むサブメニューをクリックすると、コマンドへのバインディングは機能しません。メニューアイテム最新のファイルxamlの実装Mvvm

答えて

0

最近のファイルを表すために使用しているオブジェクトは、どのタイプがわかりません。私は文字列を使用していると仮定していますが、他の型も使用している可能性があります。

バインディングフレームワークが、ビューモデルではなく最近のファイルを表すために使用しているタイプのOpenFileCommandという名前のプロパティを探しているため、このエラーが発生します。

だから、解決策は、直接ビューのDataContextのを参照するビューモデル内のコマンドにバインドするために、結合要素を使用することです:

インスタンスのMenuコントロールに名前を入れてください:

<MenuItem x:Name="Menu" Header="File"> 
</Menu> 

は今、あなたはメニューのDataContextのに結合する要素の操作を行うことができますのItemsControlでCommandプロパティのスタイルセッターで

<MenuItem Header="Recent Files" 
     ItemsSource="{Binding Path=RaptManager.RaptConfiguration.RecentFiles}" 
     Command="{Binding OpenFileCommand}"> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="Header" Value="{Binding}" /> 
      <Setter Property="Command" Value="{Binding ElementName=Menu, Path=DataContext.OpenFileCommand}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</MenuItem> 

注意私たちがMenu要素のDataContextプロパティのProperty OpenFileCommandを参照している 's' ItemContainerStyle。これは要素バインディングです。詳細を知りたい場合は、thisリンクをチェックしてください。

このようにして、ビュー・コマンドは、ビュー・モデルのCommandプロパティーに正しくバインドされている必要があります。

希望すると便利です。

+0

ItemSourceは、ObservableCollectionの文字列にバインドされています。私はお勧めしたソリューションを試しましたが、関数呼び出しはまだトリガされません。 – Methalous

+0

@Methalous、まあ、私はそれを新しいWPFアプリケーションで自分自身でテストし、うまくいきました。たぶんもう別の問題があります。私はあなたとプロジェクトを共有しているので、多分問題を見つけるのに役立ちます。 clone [this](https://github.com/ktamayop/WpfMenuSample)repoに進み、コマンドを処理するメソッドにブレークポイントを設定すると、ヒットしたことがわかります。 –

関連する問題