ItemsControl 与视图模型的多个数据模板

2023-12-12

是否可以将以画布为模板的项目控件绑定到多个数据模板?

我有 2 个集合,根据类型我想在画布上显示不同的控件。

我不确定,但我可以考虑一个具有 2 个 ObservableCollections 的 Viewmodel。例如,如果我有“形状”和“连接”并且我想将它们都显示在画布上?如果是图表场景...

我想以 mvvm 方式执行此操作,我不确定多个 DataTemplate 方法是否正确,但我想到了这一点。 但我仍然无法在头脑中理清绑定。如果我将 DataContext 设置为 ViewModel,似乎无法将 2 个集合绑定到项目控件... =( 我也对其他想法持开放态度......

这可能吗?如果是这样,绑定会是什么样子


您可以创建多个ObservableCollections然后绑定你的ItemsSource to a CompositeCollection它加入了这些集合。

然后在你的XAML中你可以创建不同的DataTemplates对于各个类型,使用DataType如果将其放置在资源中,则会自动应用类似样式的属性。 (您还可以在 MSDN 上显示的 XAML 中创建组合,如果CollectionContainers应该是有界的有点困难 though)

示例代码:

ObservableCollection<Employee> data1 = new ObservableCollection<Employee>(new Employee[]
{
    new Employee("Hans", "Programmer"),
    new Employee("Elister", "Programmer"),
    new Employee("Steve", "GUI Designer"),
    new Employee("Stefan", "GUI Designer"),
    new Employee("Joe", "Coffee Getter"),
    new Employee("Julien", "Programmer"),
});
ObservableCollection<Machine> data2 = new ObservableCollection<Machine>(new Machine[]
{
    new Machine("E12", "GreedCorp"),
    new Machine("E11", "GreedCorp"),
    new Machine("F1-MII", "CommerceComp"),
    new Machine("F2-E5", "CommerceComp")
});
CompositeCollection coll = new CompositeCollection();
coll.Add(new CollectionContainer() { Collection = data1 });
coll.Add(new CollectionContainer() { Collection = data2 });
Data = coll;
<ItemsControl ItemsSource="{Binding Data}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type local:Employee}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}"/>
                <TextBlock Text=" ("/>
                <TextBlock Text="{Binding Occupation}"/>
                <TextBlock Text=")"/>
            </StackPanel>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:Machine}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Model}"/>
                <TextBlock Text=" - "/>
                <TextBlock Text="{Binding Manufacturer}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.Resources>
</ItemsControl>

这里我使用不同的面板,但对于画布来说应该是相同的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ItemsControl 与视图模型的多个数据模板 的相关文章

  • C# WPF - 应用程序图标 + ShowInTaskbar = False

    我创建了一个具有以下属性的自定义分层 WPF 窗口 允许透明度 True 在任务栏显示 False 背景 透明 最上面 True 图标 图标 ico 我已在 项目属性 gt 应用程序 选项卡下添加了 Icon ico 如果 ShowInTa
  • Windows 更新 KB4040972/73 导致 WPF 类出现黑色图像

    我有一个依赖于深度缩放图像 从 PNG 转换为各种比例的 JPG 金字塔 的应用程序 我们使用 DeepZoomTools dll 来实现 这依赖于PresentationCore dll 多年来一直运行良好 推出 KB4040972 和
  • 设置不可调整大小的 GridViewColumn

    我在 C WPF 应用程序中使用 ListView 和 GridViewColumn 对于某些列 我使用可见性管理器 this one https stackoverflow com a 9634769 6479770 但是 当第 1 列和
  • 打印 WPF 位图图像

    打印位图图像的最佳方法是什么 我有 System Drawing 背景 所以我正在考虑将其转换为位图 然后打印它 但我认为可能有更好的方法 Thanks 根据 Drew 的回答 最好测量并安排传递给 PrintVisual 方法的容器 这将
  • 快速变化的集合 MVVM WPF - 高 CPU 使用率和 UI 几乎冻结

    我正在开发一个带有数据网格的应用程序 它显示某些正在运行的 Windows 进程 在我的示例 Chrome 进程中 当选中复选框时 数据网格会加载进程 要求 显示每个进程的名称 内存使用情况 私有工作集 的 实时 信息 就像在 Window
  • Prism 应用程序关闭时不退出

    我正在学习棱镜 我遇到了一个问题 我制作了一款应用程序 与 Mike Taulty 制作的关于 Prism 的精彩教程中的应用程序非常相似 最大的区别是我的应用程序是 WPF 应用程序而不是 Silverlight 我发现我遇到了问题 当我
  • 文本框的自定义日期格式

    有关的 将3个文本框绑定在一起 相同的日期时间不同的格式 https stackoverflow com questions 35581427 binding 3 textboxes together same datetime diffe
  • 将 WinForms ListBox 绑定到对象属性

    我第一次做一些 WinForms 编码 并尝试使用数据绑定 我有一个列表框 我将其绑定到控制器对象中的字符串数组 并且我还想将列表框中的 SelectedItem 绑定到控制器上的另一个字符串属性 以便我可以跟踪它 listBox Data
  • XAML:如何定义要在多个项目中使用的数据模板和样式

    我开始使用 WPF net 3 5 sp1 仅使用 VS 尚未混合 开发桌面应用程序 我现在的情况是 我在几个库中有一些通用的可重用组件 我可以在哪里定义样式和数据模板 以便它们可以在多个项目中重复使用 从而获得一致的外观和感觉 我看过 R
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 配置 2 在按钮 swiftUI 中发出警报消息

    我要学习 swift 和 swiftUI 我申请按类别整理笔记 如果需要的话 你可以在我的 GitHub 中找到我的项目 https github com yoan8306 List Notes https github com yoan8
  • 如何隐藏 WPF 控件的一部分

    是否可以隐藏 WPF 控件的一部分 NET 4 有一个 DatePicker 它呈现 4 个部分 根据MSDN http msdn microsoft com en us library cc278067 v vs 95 aspx 是否可以
  • 如何突出显示网格控件的边框线

    我编写了一些代码 以便将 100 x 100 个单元格添加到网格中 问题是我想突出显示分割网格的行 列的线 我应该使用什么属性 或者我应该如何做 下面是创建网格单元的代码 public partial class MainWindow Wi
  • 如何使用 CancellationTokenSource 关闭另一个线程上的对话框?

    这与我的另一个问题有关如何取消后台打印 https stackoverflow com questions 40987113 how to correctly cancel a printing task running on a back
  • 绑定到布尔值的可见性的 TargetNullValue

    我有一个Grid whose Visibility使用以下方法将属性绑定到某个模型的布尔属性Converter
  • silverlight代码需要保护吗?

    我不太明白 Silverlight 代码如何在浏览器中工作 程序集是否下载到客户端计算机 是否有可能使用 Reflector 或类似工具对代码进行反编译 如果是这样 有哪些选择可以保护代码 net 混淆器可以与 Silverlight 一起
  • 在数据网格中绑定枚举属性的最佳方法

    将枚举属性绑定到数据网格的最佳方法是什么 当前我正在使用公共属性并从那里返回枚举名称还有其他方法吗 枚举 public enum enStatus Draft 1 Published 2 Started 3 Completed 4 Mode
  • 通过搜索字符串过滤 CollectionViewSource - 绑定到 itemscontrol (WPF MVVM)

    有没有办法可以过滤CollectionViewSource仅显示游戏ItemsSource哪个 标题 包含 searchString In my PosterView我有这个CVS
  • 如何使元素在 XAML 中引用 StaticResource Storyboard(而不是引用该元素的 Storyboard)

    我正在阅读 MSDN 动画教程 它描述了将故事板应用到元素的以下步骤 创建故事板 使用以下命令指定其目标元素名称TargetName财产 指定目标属性 添加事件触发器来启动动画 我看到一个概念性问题 从中衍生出我的困难 那就是 我在故事板和
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap

随机推荐

  • Lua和javascript可以连接吗?

    我不确定这个问题是否恰当 因为英语不是我的母语 lua 和 javascript 可以连接在一起吗 我还没有找到任何相关信息 或者是否有可能 例如在 html 文件中使用两种语言编写脚本 例如 也许可以在这些语言之间共享信息 或者是否可以在
  • 如何在 Java 中合并 CSV 文件

    我的第一个 CSV 文件看起来像这样 包含标题 标题仅包含在顶部 而不包含在每个条目之后 NAME SURNAME AGE Fred Krueger Unknown n records 我的第二个文件可能如下所示 NAME MIDDLENA
  • JavaScript 正则表达式电子邮件验证[重复]

    这个问题在这里已经有答案了 此代码始终会发出警报 null 这意味着字符串与表达式不匹配 var pattern w a zA Z a zA Z 2 3 function isEmailAddress str str email prote
  • 使用 dictwriter 覆盖同一 csv 文件中的行

    我有名字 csv first name last name Baked Beans Lovely Spam John Bang Harry Potter 我想在同一文件中将 John Ban 重命名为 jason statham 我尝试使用
  • Laravel 5.1 找不到路由对象

    请帮助我 我正在使用最新版本的 xampp 开发 Laravel 并且不知道问题的原因是什么 这条路线运行良好 Route get function return aa 此路线给出错误 未找到对象 Route get about funct
  • 带参数的 mongoexport + node.js + 子进程

    我正在尝试使用 node js 从 mongodb 导出 csv 为此 我从以下代码开始 app get export function req res var spawn require child process spawn ls sp
  • URL 重写模块的自定义重写提供程序

    我有一个在 IIS 中运行的 URL 重写模块的自定义重写提供程序 我使用它根据自定义逻辑重定向请求 它是基于这样的 http www iis net learn extensions url rewrite module developi
  • SELECT 如何返回未排序的结果集?

    当我访问此链接时 我只是想以相反的顺序显示 SELECT 查询的结果集 选择 MySQL 中的最后一行 在一个答案中提到关系数据库没有第一行或最后一行 所以我的问题是我们是否输入SELECT FROM table name 结果集是否必须与
  • 模板文字在反应中不起作用

    我的代码如下 模板文字不会在 span 标记中创建多行字符串 而它会在控制台中创建多行 import React Component from react import ReactDOM from react dom class MyApp
  • OnServiceConnected 没有被调用

    我已经提到了以下问题 但找不到答案 无法获取服务对象 onServiceConnected 从未调用 onServiceConnected 没有被调用 出现空指针异常 and onServiceConnected 在bindService
  • 在 IIS7 中配置 ASP.NET

    有没有办法在 IIS7 中配置 ASP NET 我知道这一定是一个愚蠢的问题 但在 IIS7 中我看到了 ASP 的图标 这是经典 ASP 的配置吗 IIS 7 与以前的版本有很大不同 尤其是在 ASP NET 方面 在以前的版本中 ASP
  • 在VS2013中从SVN更新后,数据集Designer.cs生成Designer1.cs

    从 SVN 数据集 Designer cs 文件进行更新后 我遇到一个奇怪的问题生成另一个具有不同名称的文件 例如 test Designer cs 更新后重命名为 test1 Designer cs 我遵循发现的建议here 但无法再次生
  • 触摸开始无法检测到所触摸的内容

    我正在使用 NSTimer 构建一个旋转横幅来跟踪当前图像 该图像是由 5 个不同图像制作而成的动画 我设置了一个 TouchesBegan 来在有人单击横幅时继续处理横幅上的触摸事件 我的概念验证有效 但将其转移到另一个项目中时 它就崩溃
  • Google 重定向 URI 不允许使用片段 URL 的解决方法

    我使用mac开发一个MEAN堆栈项目 我的网页https localhost 3000 login and https localhost 3000 new工作 请注意 我的所有页面都需要有 中间工作 https localhost 300
  • 无法加载模块描述符类:找不到类“com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor”

    所以我是新手 我尝试使用 Firebase 9 0 0 实现电子邮件 密码身份验证 因此该活动要么执行注册操作 要么执行登录操作 登录操作运行顺利 我可以在 Firebase 控制台上看到更新 但是当我尝试注册新用户时 出现此错误 E Dy
  • Java:全局异常处理程序

    有没有办法在 Java 中创建全局异常处理程序 我想这样使用 When an exception is thrown somewhere in the WHOLE program exit 处理程序可能无法捕获抛出的异常try catch
  • 禁用列排序不适用于多个 angularjs 数据表

    我正在使用多个 angularjs 数据表 并在每次用户从下拉列表中选择一个选项时生成一个新表 根据用户的选择 我发出 http 请求以从数据库中获取新数据 对于每个表 我都有不同的dtColumnDefs 是动态设置的 因为我的表列标题是
  • 如何在 PHP 中随机化数组

    我有一个像这样的数组 arr 1 2 4 5 6 7 8 9 但我需要这个数组的随机版本 我正在使用该函数shuffle像这样 random shuffle arr 但这个函数只是返回true而不是数组的随机版本 shuffle 此函数对数
  • Django ModelForm ChoiceField 不显示实例数据

    我有一个ModelForm我在其中设置了几个字段的类ChoiceField 对于我的一个观点 我想从我的ModelForm从数据库中模型实例中提取的类 如下所示 form MyModel instance model instance 当我
  • ItemsControl 与视图模型的多个数据模板

    是否可以将以画布为模板的项目控件绑定到多个数据模板 我有 2 个集合 根据类型我想在画布上显示不同的控件 我不确定 但我可以考虑一个具有 2 个 ObservableCollections 的 Viewmodel 例如 如果我有 形状 和