I를 기초 뷰 모델에 의해 관리되는 문서 집합 표시하는 AvalonDock (2.0) DockingManager
제어를 이용한 제어 가지고AvalonDock (2.0) + MVVM + VSPackage = 문서 선택 문제가 있습니까?
<avalonDock:DockingManager DocumentsSource="{Binding Items}">
<avalonDock:DockingManager.LayoutItemContainerStyle>
<Style TargetType="{x:Type avalonDockControls:LayoutItem}" BasedOn="{StaticResource DocumentItem}"/>
</avalonDock:DockingManager.LayoutItemContainerStyle>
<avalonDockLayout:LayoutRoot>
<avalonDockLayout:LayoutPanel Orientation="Horizontal">
<avalonDockLayout:LayoutDocumentPane/>
</avalonDockLayout:LayoutPanel>
</avalonDockLayout:LayoutRoot>
</avalonDock:DockingManager>
문서 뷰 모델은 IsSelected
특성을 갖고, 상기 볼 모델 때 선택한 후 DockingManager
에 문서를 선택하여 표시하고 싶습니다.
<Style x:Key="DocumentItem" TargetType="{x:Type avalonDockControls:LayoutItem}">
<Setter Property="Title" Value="{Binding Model.TabTitle}"/>
<Setter Property="IsSelected" Value="{Binding Model.IsSelected, Mode=TwoWay}"/>
</Style>
이 방식은보기에서 문서를 선택, 컨트롤이 WPF 응용 프로그램 내에서 호스팅되는 경우 잘 작동하지만 컨트롤이 VSPackage 내에서 호스팅되는 경우 다음과 같이이 작업을 수행하기 위해, 나는 LayoutItem
의 Style
업데이트 모델은 선택한 문서를보기에 가져 오지 않는 경우가 많습니다. 아래 이미지에서 사용자가 편집 할 고객 노드를 클릭했지만 고객 문서가 보이지 않았습니다.
뷰 모형 층은 예상대로 IsSelected
설정되고, 제어가 TabControl
을 이용할 때 항상 선택된 문서가 상단에 나타내었다.
AvalonDock에서 문제가되는 것 같습니다. 내가 찾은 것은 뷰 모델을 통해 LayoutItem
이 선택되었을 때 목록의 첫 번째 문서가 LayoutDocument/LayoutContent/LayoutElement
레이어에서 true로 다시 선택되는 경우입니다.이 레이어는 다시 물방울로 흐르고 LayoutItem
레이어에서 IsSelected
을 true로 재설정합니다. 내 IsSelected
을 내보기 모델의 LayoutDocument/LayoutContent/LayoutElement
레이어에 바인딩하고 싶지만 해당 레이어에는 DependencyProperty
이 없습니다.
IsSelected
을 내보기 모델에 바인딩하는 대체 방법을 시도했지만 지금까지 성공하지 못했습니다. 다른 사람이이 문제에 부딪 혔습니까? 어떤 해결 방법이나 다른 접근법을 알고 있습니까? 나는 비 MVVM 접근 방식을 사용하는 것에 의존하는 것을 싫어한다. 단지 문서 선택을하는 것이다.
편집 : 그것은이 문제처럼 보인다 수도 모호한, 나는 어려움도 VSPackage와 함께, 재생 테스트 케이스를 작성하는 데 문제가있다. 이중 ToolWindow
및 중재자 메시지를 사용하여 실제 컨트롤을 시뮬레이트하는 다음 테스트 케이스에서는 문서 선택이 올바르게 작동합니다.
(A WPF 응용 프로그램과 VSPackage 포함)이 테스트 케이스 here을 볼 수 있습니다 (선택하거나 생성에서 문서를 선택 도구 창을 실행하고, 하나 개의 창에서 문서 제목을 입력 Tools=>My command name
클릭 DockingManager
이있는 창).
저는 VS 내부에서 Avalon과 작업하지 않았습니다 (2010/12입니까?) -하지만 비슷한 문제가 많이 있습니다 (다른 Avalon 구성 요소). 하나의 질문, 그냥 '유머 나':) - 전체 문제를 유발하는 '문서 선택'이 마우스 또는 키보드에서 발생합니까? (즉, 이벤트의 근본적인 '출처'). 그리고 btw. 간단한 재구성 프로젝트가 있습니까? - 한 번 둘러 볼 수는 있지만 시간을 들여서 설정할 수는 없습니다. – NSGaga
VS2010에서 문제가 발생했습니다. 2012 년 아직 시도하지 않았습니다. 사용자가 문서를 편집하도록 선택하면 문제를 유발하는 문서 선택이 발생합니다. Mediator 디자인 패턴을 사용하는 메시지가 트리보기 컨트롤/창에서 DockingManager가있는 "디자이너"컨트롤/창으로 전송됩니다. 디자이너 뷰 모델에 문서가 없으면 문서가 추가되고 모든 경우에 연관된 문서 뷰 모델의 IsSelected가 true로 설정됩니다. DockingManager의 관점에서 볼 때, 업데이트 된 문서 목록 및/또는 문서 IsSelected의 변경 내용 만보아야합니다. –
오늘은 시간이 없지만 내일 샘플 프로젝트를 만드는 방법을 살펴 보겠습니다. VSPackage 외부에서 오류를 유도하려고 시도합니다. VSPackage에서 DockingManager를 실행하려면 AvalonDock을 GAC 또는 다른 알려진 장소에 설치해야합니다. –