2012-01-17 1 views
0

안에, 내가있어 UserControl (LayoutUserControl)를 사용하여 레이아웃 객체 : 우리가 레이아웃 컬렉션에 개체를 추가 할 때부모 - 자식 내 MainWindow를에서 DataTemplate을

<DataTemplate DataType="{x:Type local:Layout}"> 
    <local:LayoutUserControl /> 
</DataTemplate> 

, 우리는 새로운 LayoutUserControls이 목록 상자를 채울 참조하십시오. 이것은 꽤 솔직합니다.

이제, 어떻게하고 싶은지, 어떻게 든 MainWindow에서 개별 LayoutUserControls로 통신합니다. 특히, MainWindow에서 LayoutUserControls 각각에 대해 하나의 메서드를 호출하려고합니다 ... ListBox의 Items 컬렉션을 반복 할 경우 LayoutUserControls가 아닌 Layout 개체에 대한 참조 만 얻습니다. LayoutUserControls는 DataTemplate에 정의되어 있으므로 액세스하기 위해 명명 된 참조가 없습니다. ...

부모 컨트롤에서 자식 컨트롤로 이러한 유형의 상호 작용을 지원하는 WPF 구문이 있습니까? RoutedEvents는 처음 생각했지만 부모와 자식 사이의 의사 소통 만 지원합니다. 아마도 명령은 갈 길입니까?

도움을 주시면 감사하겠습니다.

감사합니다.

답변

2

예, 을 절대 사용하지 않아야합니다. ItemContainerGenerator입니다.

자신이 언급 한 것처럼 의사 소통을 다르게 설정해야 합리적으로 적당합니다. Layout에 명령을 노출시키고 UserControl을 그것에 바인드하십시오. 또는 이벤트를 만들고 UserControl을 구독하면 인상 할 수 있습니다.

+0

신속한 의견을 보내 주셔서 감사합니다. 가능한 경우 '구식'이벤트 등록을하지 않으려합니다. LayoutUserControl에서 간단한 ICommand를 노출 할 수 있다고 확신합니다. 어떻게 바인딩하고 MainWindow에서 호출 할 수 있습니까? 공유 할 수있는 참조 또는 예는 무엇입니까? –

+0

@JohnRussell : 명령은 일반적으로 데이터에 대한 것이므로 원하는 데이터는 UI에 대한 데이터이므로 이전 학교 이벤트를 사용하는 것이 훨씬 쉽습니다. 명령을 사용하면 확실하게 어떻게 든 작동 할 수는 있지만 좋은 방법은 배트에서 바로 사용할 수는 없지만 너무 자세히 살펴 볼 것입니다 ... –

+0

Ah. 자, 내가 어디로 가는지 알 것 같아. 내가 틀렸다면 나를 바로 잡아라. 레이아웃 객체에 메서드를 추가하고 OnRaiseEvent()를 호출 할 수 있습니다. 내 MainWindow에서 컬렉션의 각 레이아웃에 대해 호출됩니다. Layout 객체에서 OnRaiseEvent는 내 작업을 수행하기 위해 LayoutUserControl에 이벤트를 발생시킵니다. 니가 말하는거야? –