2014-06-27 69 views
1

我有一個值可以更改,不會引發更改事件,並且綁定到該值的菜單項不能正確反映當菜單項是打開。我想在菜單打開時更新此綁定。我該怎麼做呢?WPF如何強制菜單項綁定更新菜單打開時

每次打開菜單時,我可以有一個菜單項只是輪詢它的綁定嗎?在這種情況下,IsCommEnabled屬性:

<MenuItem Header="{Binding EnableComm}" 
    Command="{Binding Root.ToggleCommunications}" 
    IsChecked="{Binding Authorization.IsCommEnabled, Mode=OneWay,   UpdateSourceTrigger=PropertyChanged}"/> 

-

public bool IsCommEnabled { 
     get { return _communications.IsCommEnabled; } 
    } 

回答

0

您可以訂閱SubmenuOpened你必須提高NotifyPropertyChanged事件並手動更新綁定:

void MenuItem_SubmenuOpened(object sender, RoutedEventArgs e) 
{ 
    ((MenuItem)sender).GetBindingExpression(MenuItem.IsCheckedProperty).UpdateTarget(); 
} 

請注意,上述內容適用於正在打開的父項目,因此您可能需要對其進行爭論以確保它是正確更新的項目。您可以使用MenuItem上的Items集合來深入挖掘。

0

,如果你想推IsCommEnabled回勢必Dependency Property

+0

正確,但是當值發生變化時,無法在該時間點通知。有沒有另一種方式來強制更新,比如當菜單打開或被點擊什麼的時候? – jchristof

+0

你可以做'GetBindingExpression(MenuItem.IsCheckedProperty).UpdateTarget();' –

相關問題