wpf - DataTemplate 可以绑定(bind)到嵌套类吗?

标签 wpf xaml mvvm datatemplate nested-class

XAML 中的 DataTemplate 可以与嵌套类关联吗?

我正在开发 MVVM 应用程序,并且遇到了数据模板问题。我有一个 View 模型,为项目控件提供其他 View 模型的集合。这些项目是在外部 View 模型中定义为嵌套类的层次结构的一部分。到目前为止,我无法在 XAML 中创建映射来引用内部嵌套类。

这是类层次结构(为简洁起见,进行了简化):

public class MainViewModel
{
    public class A
    {
    }

    public class B : A
    {
    }

    public class C : A
    {
    }

    public ObservableCollection<A> Items
    {
        get;
        set;
    }
}

在 XAML 中,我尝试将 DataTemplate 映射到类型 B 和 C,但我无法完全限定嵌套类名称。

<ItemsControl ItemsSource="{Binding Path=Items}">
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type ns:BracingViewModel.B}">
            <Grid>
            ....
            </Grid>
        </DataTemplate>
        <DataTemplate DataType="{x:Type ns:BracingViewModel.C}">
            <Grid>
            ....
            </Grid>
        </DataTemplate>
    </ItemsControl.Resources>
</ItemsControl>

问题:对嵌套类的引用在 XAML 中显示为构建错误。我得到以下信息:

Error   5   Cannot find the type 'ns:B'. Note that type names are case sensitive. Line...

Error   5   Cannot find the type 'ns:C'. Note that type names are case sensitive. Line...

如果我将 A、B、C 类层次结构移到 MainViewModel 类之外(即到命名空间级别),则效果很好。

作为一般习惯,我尝试将与 View 模型相关的类定义为其中的嵌套类,但这导致了我遇到这个问题。

所以,我的问题是:是否可以将 DataTemplate 与嵌套类相关联?如果是这样,那么 XAML 部分是如何完成的?

提前致谢... 乔

最佳答案

这对我有用:

 <ItemsControl ItemsSource="{Binding Path=Items}">
        <ItemsControl.Resources>
            <DataTemplate DataType="{x:Type ns:MainViewModel+B}">
                <Grid Background="Blue"
                      Width="30"
                      Height="30">

                </Grid>
            </DataTemplate>
            <DataTemplate DataType="{x:Type ns:MainViewModel+C}">
                <Grid Background="Chartreuse" Width="30" Height="30">

                </Grid>
            </DataTemplate>
        </ItemsControl.Resources>
    </ItemsControl>

换句话说,只需将 x:Type 标记扩展中的 . 更改为 +

信用至:this thread

关于wpf - DataTemplate 可以绑定(bind)到嵌套类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806438/

相关文章:

c# - 当 DataTemplate 为 Button 时,ListBox 项返回字符串

c# - 使用 SVG 文件作为 Windows 应用商店应用程序 (Metro) 的背景

c# - 如何创建 'Private' ResourceDictionary?

c# - 在当前用户控件中单击按钮时显示不同的用户控件

android - 存储库之间的通信 -> 查看模型 -> Activity

c# - 仅在特定 GridViewColumn 中右键单击时显示上下文菜单

c# - Caliburn.Micro 将 View 模型与 ItemsControl 绑定(bind)列表

c# - 使用 MVVM 模式中的 DXGrid 绑定(bind)/编辑数据的最佳选择是什么?

silverlight - 'Self' 构造在 Silverlight/MVVM 中有用吗?

WPF Xaml 处理顺序