2013-12-11 13 views
5

私はMVVMアプリケーションを持っており、ContextMenuを追加したいと思います。IsChecked ContextMenuのMenuItemでバインディングが機能しない

私は、XAMLにのContextMenuを追加してから(それは問題ではないので、ここで一つだけのアイテム)は、このような項目を設定します。

<MenuItem Header="{x:Static Monitor:MonitorResources.R0206_SaveLatestValueToDatabase}" 
             IsCheckable="true" 
             IsChecked="{Binding ElementName=root, Path=Model.SaveToDbOneChecked}" 
             IsEnabled="{Binding ElementName=root, Path=Model.SaveToDbOneEnabled}"> 

SaveToDbOneCheckedとSaveToDbOneEnabledは以下のように実装されている私のモデルではプロパティですこの:

private bool mSaveToDbOneEnabled; 

    public bool SaveToDbOneChecked 
    { 
     get { return mSaveToDbOneChecked; } 
     set { mSaveToDbOneChecked = value; OnPropertyChanged("SaveToDbOneChecked"); } 
    } 

私はのContextMenu前にこれらを設定

は、GridViewコントロールのContextMenuがであるにSelectionChangedに呼び出されます。しかしSaveToDbOneCheckedが設定されているが、それは次のMenuItemのテキストにチェック記号が表示されません。本当に!私はどこが間違っているのか分かりませんし、誰かが私をここで助けてくれることを願っています。

+1

デバッグ中にアプリケーションを実行し、出力ウィンドウにバインドエラーをチェック。 –

+0

ええ、かなりあります: 'ElementName = root'の参照でバインディングのソースを見つけることができません。 BindingExpression:Path = Model.SaveToDbOneChecked; DataItem = null;ターゲット要素は 'MenuItem'(Name = '')です。ターゲットプロパティが 'IsEnabled'(タイプ 'ブール') バインディングの問題は何ですか? o_O – Kazoooka

答えて

5

これを行うには、いくつかのことが必要です。まず第一に、MenuItemElementNameプロパティを使用して内部からバインドすることはできません。なぜなら、ターゲット要素はほとんどの場合あなたの範囲外です。

私が正しく理解していればModelは、この場合には、あなたがしなければならないすべてはContextMenuが置かれている要素のDataContextとしてそれを設定することで、あなたのViewModel財産です。 これはあなたのMenuItemに同じDataContextを設定し、あなたはDataContextに直接結合することができます。

IsChecked="{Binding SaveToDbOneChecked, Mode=TwoWay}" 
+0

恐ろしい!それは完全に動作します!ありがとうございます!! – Kazoooka

関連する問題