2013-11-04 4 views
0

내가 아니 난에 ParentClass의 목록을 가지고 다음과 같은 문제WPF 목록 및 가시성

public abstract class ParentClass 
{ 
public int Field{get;set;} 
} 

public class ChildrenClass1 : ParentClass 
{ 
public int Field2{get;set;} 
} 
public class ChildrenClass2 : ParentClass 
{ 
public int Field3{get;set;} 
} 

이 없습니다.

List<ParentClass> Parents = new List<ParentClass>(); 

이렇게하면 목록 상자에 바인딩됩니다.

<ListBox ItemsSource = "{Binding Parents}"/> 

그리고 지금은 필드 2를 보여주고 싶은 ChildrenClass1이 유형이며이 ChildrenClass2 경우 내가 목록 상자 ItemTemplate을에서 입력란 3을 보여주고 싶은 경우.

<ListBox ItemsSource = "{Binding Parents}"/> 
<ListBox.ItemTemplate> 
<DataTemplate> 
<TextBlock Text = "{Binding Converter = {StaticResource Converter}}"/> 
</DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 

그리고 컨버터 항목의 유형을 확인하고 등등 ChildrenClass1하고있는 경우 필드 2를 반환해야합니다 :

내 머리에 온 첫 번째 솔루션은 같은 것을 할 것입니다.

하지만 솔루션보다는 해결 방법이라고 생각합니다. xaml 또는 이와 비슷한 형식을 검사 할 수있는 것이 있습니까? 이 문제를 어떻게 해결합니까?

편집 : DataTemplate을 획기적으로 변경하려는 경우 상황이 어떻습니까? 위의 해결 방법은 쓸모가 없습니다. 이 문제의 해결 방법은 다른 DataTemplate을 사용하여 2 개의 ListBox를 만들고 실제 유형 항목을 검사하는 변환기로 가시성을 설정하는 것입니다. 그러나 많은 바인딩 오류를 생성하고 응용 프로그램을 느리게하는 대신 2 개의 목록 상자를 생성합니다.

답변

3

각 유형에 대해 두 개의 DataTemplate을 만들 수 있으며 WPF가 모든 마법을 재생할 수 있습니다.

<DataTemplate DataType="{x:Type namespace:ChildrenClass1}"> 
<TextBlock Text="{Binding Field2}"/> 
</DataTemplate> 

<DataTemplate DataType="{x:Type namespace:ChildrenClass2}"> 
<TextBlock Text="{Binding Field3}"/> 
</DataTemplate> 
+0

천재에 따라 올바른 값을 반환하는 프로퍼티/메소드 바인딩에 대해, 내가 필요로 무엇을 먹으 렴! :) 감사합니다! – MistyK

+1

@Zbigniew - 이것이 허용 된 대답이어야합니다. 그렇지 않니? –

+0

예, 저의 실수입니다. – MistyK

0

은 어떻게 ObjectDataProvider에 부모 수집을 포장하고 ChildrenClass의 종류