2013-10-14 114 views
0

我有一個ContextMenuDataGrid和我想標記MenuItem選中或取消選中,取決於網格中右鍵單擊的項目。重新計算MenuItem.IsChecked

因此,我將MenuItem上的'IsChecked'屬性綁定到ViewModel上的屬性,並且此屬性由我的VM根據右鍵單擊的項目設置爲true或false。

但是,事實證明,我的ContextMenu項目的'IsChecked'屬性僅評估一次。每次我點擊一個項目時都不會評估它。

對於隨後的所有右鍵單擊,保留第一次執行的評估。

屬性'IsCheckedonVM'的getter未被觸發。

<MenuItem Command= IsCheckable="True" 
        IsChecked="{Binding IsCheckedonVM}" 
        Header = ".." 
    </MenuItem> 

在VM:

public bool IsCheckedonVM 
{ 
get 
{ 
    return selectedItem.IsChecked; 
} 
set 
{ 
    selecteditem.IsChecked = value; 
    OnPropertyChanged("IsCheckedonVM"); 
} 

我怎樣才能讓我的MenuItemIsChecked屬性進行評估每次它的RightClicked,使IsCheckedonVM是牽強每次?

+0

嘗試綁定命令到您的DataGrid的右鍵單擊事件並執行專用邏輯根據網格的SelectedItem確定'IsCheckedonVM'的值... –

回答

0

您可以嘗試命令綁定到您DataGrid對的單擊事件並執行專用邏輯基於網格

例子(使用棱鏡框架)的SelectedItem確定IsCheckedonVM值:

<DataGrid x:Name="myGrid" ItemsSource="{Binding SomeCollection}"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseRightButtonDown"> 
       <i:InvokeCommandAction Command="{Binding DetermineIsCheckedCommand}" CommandParameter="{Binding ElementName=myGrid, Path=SelectedItem}"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </DataGrid> 

並在命令中:

DetermineIsCheckedCommand = new DelegateCommand<object>(selectedItem => 
{ 
    // Do logic and set IsCheckedonVM accordingly 
}); 
+0

我實際上想在網格的上下文菜單中顯示該屬性是否被選中或不選中,右鍵單擊項目。不能刪除上下文菜單選項。 – user2878253