2012-04-04 5 views
0

WPF를 처음 사용합니다. 나는 사용자가 많은 양의 데이터를 채우고 폼의 일부분을 반복해야하는 함수 (초기화라고 함)가있는 응용 프로그램을 작성하려고합니다. 꽤 오래 마법사가있는 레거시 응용 프로그램을 다시 작성하고 있지만 다음 페이지/이전 페이지가 아니라 한 창에서 접을 수있는 패널을 사용합니다. 또한, 일부는 예를 들어, 반복된다. 사용자가 항목 수를 지정할 수 있습니다. 3이라고 말하면 각각에 대한 구성 정보를 입력해야하므로 해당 컨트롤을 세 번 반복해야합니다. http://msdn.microsoft.com/en-us/magazine/dd419663.aspxWPF에서 자식 컨트롤의 데이터 바인딩

오래된 마법사가 나는 휴식하는 4 자식 사용자 컨트롤을 포함하는 하나의 사용자 컨트롤 (초기화)가하려는거야 그래서 약 4 페이지를했다 : 나는 MVVM을 사용하고 있는데 여기에이 예제를 사용하고

xaml 조금.

은 지금까지 나는 (그 뷰 모델은 위의 예에서와 같이 작업 공간 뷰 모델에서 상속) 초기화를하며 노력하고 하나의 자식이 포함

<Expander ExpandDirection="Down" Header="ChildOne"> 
<view:ChildOne /> 
</Expander> 

내가 Intialisation 각 자녀와 별도 ViewModels이됩니다 그리고 이것은 내 문제를 일으킨다. 오전 데 문제는 ChildOne 난과 같이 결합하는 것을 시도하고 드롭 다운이 포함되어 있다는 것입니다 :

<ComboBox x:Name="textMessageTypeCmb" ItemsSource="{Binding Path=TextMessageSelectionOptions, Mode=OneTime}"/> 

TextMessageSelectionOptions이 ChildOne의 뷰 모델의 공공 재산입니다. 이렇게하면 오류는 발생하지 않지만 빈 드롭 다운이 발생합니다.이 속성은 getter가 호출되지 않습니다. Initialize의 ViewModel로 그 속성 getter 코드를 옮기면 작동하지만, 코드를 관리 가능한 덩어리로 유지하려고합니다. 그래서 Hat 코드를 ChildOne의 ViewModel에 다시 넣고 싶습니다. 내 MainWindow를 내가 이런 대신 초기화의 작업 공간으로 ChildOne을 만들 경우에도 작동

ChildOneViewModel ws = this.Workspaces.FirstOrDefault(vm => vm is ChildOneViewModel) as ChildOneViewModel; 

사람이 내가 (여러 사용자 컨트롤로 그것을 나누어) 올바른 접근 방식을 복용하고 있는지 조언 I가 필요 할 수 이 일을하기 위해 구속력을 발휘 하는가? 나는이 사실을 아직 이해하지 못하고있다.

답변

1

ChildOne보기의 DataContext은 여전히이 초기화 vm입니다.

당신은 그것을 ChildOneViewModel 객체

... 
<view:ChildOne DataContext={Binding PropertyReturnsChildOneViewModellObject/> 
... 

에 대한 전망 Datacontext를 결합 또는 콤보 상자 ItemsSource 소품의 경로를 지정할 수 있습니다.

<ComboBox x:Name="textMessageTypeCmb" ItemsSource="{Binding Path=PropertyReturnsChildOneViewModellObject.TextMessageSelectionOptions, Mode=OneTime}"/> 

참고 : PropertyReturnsChildOneViewModellObject는 Initialization vm의 속성입니다.

+0

둘 다 작동합니다. 나는 childviewmodel 속성에 바인딩해야하는 몇 가지 컨트롤이 있으므로 전자를 선택했습니다. 고마워요. 아직 투표권이 없다는 평판이 있습니다. – Nix

관련 문제