不同主体的WPF数据模板

本文关键字:数据 WPF 主体 | 更新日期: 2023-09-27 18:12:49

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

我的问题是访问类型。

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>

为什么这个不行?是否有另一种可能性来显示这些属性根据对象的数据类型?

不同主体的WPF数据模板

DataTemplate的DataType属性需要一个显式的{x:Type ...}表达式。

这是因为它的类型是object,与之相反,例如样式的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>