2010-07-06 2 views
1

Я использую AvalonDock для компоновки моего приложения.AvalonDock - Bind MenuItem to State of DockableContent

Я хочу создать «View» MenuItem с проверяемым MenuItem для каждого из моих DockableContents, который будет отображать/скрывать каждый элемент.

Я не нахожу пример того, кто это делает, и мне кажется, что свойство State является readonly, что делает невозможным создание привязки 2-way к 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

+0

В образце кода указанный DockableContent является переменной 'element' в StateChanged. –

+0

Извините, я думал, что вы установите это свойство в MenuItem, но вы действительно просто привязываетесь к свойству DockableContent, и оно будет передано. Я попробую это. – jonathanpeppers

Смежные вопросы