2010-07-06 57 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

相关问题