2010-07-06 58 views
1

我使用AvalonDock來佈局我的應用程序。AvalonDock - 將MenuItem綁定到DockableContent狀態

我想爲每個可顯示/隱藏每個項目的DockableContents創建一個帶有可選MenuItem的「View」MenuItem。

我沒有找到任何人這樣做的例子,而且在我看來State屬性是隻讀的,使得無法創建對MenuItem的雙向綁定。它也看起來像你必須調用方法來改變狀態。

任何人都有一個聰明的方式來做到這一點綁定?還是有一個簡單的方法來做到這一點,我錯過了。

回答

1

一種可能的解決方案是使用附加屬性。附加屬性將調用必要的方法來更改狀態。你可以綁定到那個。

public static class ContentAttach 
{ 
    public static readonly DependencyProperty StateProperty = DependencyProperty.RegisterAttached(
     "State", typeof(DockableContentState), typeof(ContentAttach), new PropertyMetadata(StateChanged)); 
    public static void SetState(DockableContent element, DockableContentState value) 
    { 
     element.SetValue(StateProperty, value); 
    } 
    public static DockableContentState GetState(DockableContent element) 
    { 
     return (DockableContentState)element.GetValue(StateProperty); 
    } 
    private static void StateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var element = (DockableContent)d; 
     var state = (DockableContentState)e.NewValue; 
     switch (state) 
     { 
      // Call methods in here to change State. 
     } 
    } 
} 
+0

好的開始。你如何從這個靜態類中獲得對指定的Avalon DockableContent的引用?而且我不得不以某種方式使它成爲雙向的,所以我必須在DockableContent上註冊一個事件並更改附加DP的值。 – jonathanpeppers 2010-07-06 01:46:38

+0

在示例代碼中,指定的DockableContent是StateChanged中的'element'變量。 – 2010-07-06 02:58:44

+0

對不起,我在想你會在MenuItem上設置這個屬性,但你真的只是綁定到DockableContent的屬性,它會被傳入。我會試試這個。 – jonathanpeppers 2010-07-06 12:23:25

相關問題