2010-07-06 4 views
1

AvalonDock을 사용하여 응용 프로그램을 레이아웃합니다.AvalonDock - DockableContent 상태로 메뉴 항목을 바인딩

각 항목을 표시하거나 숨길 수있는 각 DockableContents에 대해 확인 가능한 MenuItem이있는 "보기"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에 대한 참조를 어떻게 얻을 수 있습니까? 어떻게 든 2 방향으로 만들어야하므로 DockableContent에 이벤트를 등록하고 첨부 된 DP의 값을 변경해야합니다. – jonathanpeppers

+0

샘플 코드에서 지정된 DockableContent는 StateChanged의 'element'변수입니다. –

+0

죄송합니다. MenuItem에서이 속성을 설정하려고 생각했지만 실제로 DockableContent의 속성에 바인딩하면 전달 될 것입니다. 시도해 보겠습니다. – jonathanpeppers

관련 문제