2010-01-29 5 views
3

나는 Chart 패널과 일부 차트 데이터, 즉 차트 컨트롤 (그래프의 색상 변경, 차트의 항목 활성화 또는 비활성화 등)을 조작하는 다른 영역으로 구성된 UserControl에서 작업 중입니다.두 개의 UserControl을 동일한 DataContext 또는 ViewModel에 바인딩하고 있습니까?

차트와 데이터를 관리하기 위해 ViewModel을 사용했지만 차트 컨트롤 영역에서 별도의 사용자 정의 컨트롤을 만들어 내 xaml을 크게 유지하고 구성 요소를 분리하는 것이 좋을지도 모른다고 생각했습니다.

컨트롤을 사용하려면 ChartViewModel의 데이터를 조작해야하므로 어떻게해야합니까? Chart 컨트롤의 DataContextChartDataContext에 바인딩 할 수 있습니까? ViewModel이 있습니까? 내 차트 컨트롤에 자체 뷰 모델을 제공하고 차트 패널과 차트 컨트롤을 통해 뷰 모델을 어떻게 든 말하게해야합니까?

아니면 별도의 usercontrol을 잊어 버리고 하나의 큰 viewmodel/xaml 컨트롤에 모든 것을 넣으시겠습니까?

이 경우 사람들이 무엇을 권하고 싶습니까?

답변

3

두 개의 UserControl을 반드시 ViewModel에 바인딩 할 수 있습니다. 각각의 DataContext을 동일한 객체 인스턴스에 바인딩 할 수 있습니다. 또는 한 컨트롤의 DataContext을 다른 하나의 DataContext에 바인딩하여 ViewModel에 바인딩 할 수 있다고 가정합니다.

XAML이 다루기가 힘들어 진 것처럼 느껴진다면 XAML을 여러보기로 구분해야한다는 데 동의합니다. 일관성이 없거나 너무 커질 때까지 ViewModel 구현을 분리해야한다는 의미는 없습니다. 어쨌든 의사 소통을해야한다고 제안하면서 복잡성이 추가 될 것입니다.

차트 컨트롤 영역에서 UserControl을 만들고 컨트롤을 기존 컨트롤에 포함시키는 것으로 시작할 수 있습니다. 그런 다음 차트 컨트롤을 사용하는 화면을 수정할 필요가 없습니다.

+0

멋지다. 분명히 나를 위해 단순화 할 것이다. 각각의 DataContext를 동일한 객체 인스턴스에 바인딩하거나 한 컨트롤의 DataContext를 다른 컨트롤의 datacontext에 바인드하는 방법을 보여주는 작은 예제 나 링크를 제공 할 수 있습니까? 어느 쪽이든 작동해야하지만 구문을 발견하지 못했습니다. 감사! – Nicros

+0

알아 냈어, 괜찮아 보인다. 자식 UserControl : DataContext = "{바인딩 DataContext, RelativeSource = {RelativeSource FindAncestor, AncestorType = {x : 유형 로컬 : SpectraView}}}" – Nicros

+0

상대 원본 데이터 바인딩에주의하십시오. 런타임시 비용이 많이 듭니다! 왜 그 이름으로 다른 요소에 직접 바인딩하지 않습니까? –

관련 문제