针对不同主体的WPF DataTemplate

时间:2015-09-15 06:33:53

标签: c# wpf

如您所知,有一种方法可以将DataTemplate绑定到特定的DataType。这正是我想要UserPrincipalGroupPrincipal来自System.DirectoryServices.AccountManagement

我的问题是访问类型。

xmlns:ds="clr-namespace:System.DirectoryServices.AccountManagement;assembly=System.DirectoryServices.AccountManagement"

[...]

<Window.Resources>
        <DataTemplate DataType="ds:UserPrincipal">
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}" />
            </StackPanel>
        </DataTemplate>
        <DataTemplate DataType="ds:GroupPrincipal">
            <StackPanel>
                <TextBlock Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>
</Window.Resources>

为什么这不起作用?是否有其他可能根据对象的DataType显示这些属性?

1 个答案:

答案 0 :(得分:3)

DataTemplate的DataType属性需要明确的{x:Type ...}表达式。

那是因为它的类型是object,与之相反,例如Style的TargetType属性,类型为Type。如果没有{x:Type ...},则属性值只是一个字符串。

<DataTemplate DataType="{x:Type ds:UserPrincipal}">
    <StackPanel>
        <TextBlock Text="{Binding DisplayName}"/>
    </StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type ds:GroupPrincipal}">
    <StackPanel>
        <TextBlock Text="{Binding Name}"/>
    </StackPanel>
</DataTemplate>