데이터 템플릿을 사용하는 비슷한 설정이 있는데 상속 된 클래스와 잘 맞습니다. 이게 내가 한 일이야.
<DataTemplate x:Key="ShowTime" DataType="TestApp.User">
<TextBlock Text="{Binding Path=Name}" HorizontalAlignment="Center"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:User}">
<StackPanel Margin="10">
<TextBlock Text="{Binding Path=Name}"/>
<TextBlock Text="{Binding Path=Age}"/>
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Author}">
<StackPanel Margin="10">
<TextBlock Text="{Binding Path=Name}"/>
<TextBlock Text="{Binding Path=Age}"/>
<TextBlock Text="{Binding Path=FirstTitle}"/>
</StackPanel>
</DataTemplate>
첫 번째 템플릿 목록 자체에 표시 될 것입니다 : 나는 다음과 같은 DataTemplates이있는 Window.Resources 섹션에서
<ListBox Name="UserList" ItemsSource="{Binding Path=Users}"
ItemTemplate="{StaticResource ShowUserName}"
SelectedItem="{Binding Path=SelectedUser, Mode=TwoWay}">
</ListBox>
<ContentControl Content="{Binding ElementName=UserList, Path=SelectedItem}"/>
. 목록 상자의 ItemTemplate 속성에서 key를 사용하여 참조합니다. 다른 두 데이터 템플릿은 선택한 항목에 대해 표시 할 내용을 결정할 때 콘텐츠 컨트롤에서 사용됩니다. 선택한 항목이 사용자 일 경우 User DataTemplate이 표시되고 작성자가 선택되면 작성자 DataTemplate이 표시됩니다.
x : Type local : 작성자가 클래스 유형을 참조하고 있습니다. local은 네임 스페이스 선언에 선언되어야합니다.
xmlns:local="clr-namespace:TestApp"
여기가 내 네임 스페이스이므로 사용중인 것을 지정해야합니다. 그리고 물론 데이터 템플릿은 단지 기본적인 예제 일뿐입니다. 아마도 여러분은 여러분의 어플리케이션에 더 적합한 것을하고자 할 것입니다.
그러나 두 클래스에 대해 거의 똑같은 두 개의 별도 데이터 템플릿을 정의해야 할 수도 있습니다. 당신은 분명히 할 수 있겠지만. 나는 각 응용 프로그램에서 (이 예제가 아닌)이 작업을 수행합니다. 왜냐하면 각 유형별로 표시 할 내용이 크게 다르기 때문입니다.
그래서 모든 사용자 속성에 대해 공통 DataTemplate을 만들고이 DataTemplate을 작성자 용으로 확장하면 유용합니다. 당신이 이런 식으로 템플릿을 설정할 수 있습니다 그렇게하려면 : 당신이 볼 수있는
<DataTemplate x:Key="UserTemplate">
<!-- show all the properties of the user class here -->
</DataTemplate>
<DataTemplate DataType="{x:Type local:User}">
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource UserTemplate}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Author}">
<StackPanel>
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource UserTemplate}"/>
<!-- show all the additional Author properties here -->
</StackPanel>
</DataTemplate>
따라서, 사용자 및 저자에 대한 DataTemplates 모두는 "UserTemplate"라는 DataTemplate을을 사용하여 시작합니다. 그러나 Author DataTemplate에서는 Author 특정 속성을 추가합니다.
도움이 되었기를 바랍니다.
출처
2010-12-14 01:26:28
Liz
실제로 도움이됩니다. 매우 명확한 설명에 감사드립니다. 나는 또한 당신이 실수로 내 질문에 대한 또 다른 질문에 대답했다고 생각합니다 : http://stackoverflow.com/questions/4355045/is-there-something-in-wpf-similar-to-style-basedon-for-datatemplate/4356909 # 4356909. 나는 당신에게 신용을 줄 게시물을 편집합니다. – Sheridan
항상 도와 주셔서 감사합니다 :) – Liz