问题标签 [datatemplate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1664 浏览

wpf - 在 ListView 中动态嵌套 DataTemplates

我有一个 MyTypeOneViewModel 类型的对象,它显示在 ListView 的第一列中,我有一个 MyTypeTwoViewModel 类型的对象,它显示在我的 ListView 的第二列中。这两种类型都有一个 MyNestedViewModel 类型的属性。现在我想根据该属性的实际类型为 ListView 中的每个单元格显示不同的 DataTemplate。例如,如果该属性实际上包含一个 MyDoubleNestedViewModel,我想在该单元格中显示一个文本框,如果该属性包含一个 MyBooleanNestedViewModel,我想在 ListView 的该特定单元格中显示一个 ComboBox。请注意,DataTemplate 在每一行和每一列中可能会有所不同。

我可以在没有 TemplateSelector 的情况下实现这一点吗?WPF 能够根据绑定的类型自动选择正确的 DataTemplate。但这在 ListView 的这种嵌套场景中是否也能以某种方式工作?

0 投票
2 回答
2262 浏览

wpf - DataGrid:帮助访问在 Ce​​llEditingTemplate 中定义的控件

我正在使用带有 DataGridTemplateColumn 的 WPF DataGrid。DataGridTemplateColumn.CellEditingTemplate 包含一个组合框,其中 IsEditable 设置为“true”。在我的 RowEditEnding 事件处理程序中,我想读取该 ComboBox 的 Text 属性 - 唯一的问题是我不知道如何在事件处理程序中检索 ComboBox 实例以获取 Text 属性。

作为参考,这是我的数据模板:

我的代码:

我知道我可以使用 e.Row 到达当前受影响的行......也许解决方案涉及使用 e.Row 的东西?我尝试从 e.Row 递归地遍历视觉树,寻找 ComboBox 的实例,但没有骰子。我几乎肯定该解决方案很简单,但是,总的来说,我对 WPF 比较陌生。任何建议将不胜感激。

谢谢!

0 投票
6 回答
27528 浏览

silverlight - Silverlight 3:ListBox DataTemplate Horizo​​ntalAlignment

我有一个 ListBox,它的 ItemTemplate 绑定到 DataTemplate。我的问题是我无法让模板中的元素拉伸到 ListBox 的整个宽度。

如您所见,我在网格中添加了一个边框来指示模板的宽度。我的目标是看到这个边框扩展到列表框的整个宽度。目前它的宽度由它的内容或 MinWidth 决定,这是目前唯一让它保持可见的东西。

0 投票
1 回答
7992 浏览

wpf - WPF - 使用数据模板显示单个实体

我有一个在项目控制中使用的数据模板,我想知道它是否可能在没有项目控制的情况下在单个项目显示上使用它(模板)?

如果不是最好的方法是什么...?

0 投票
1 回答
620 浏览

c# - 如何将 DataTemplate 应用于 XElement 子类?

当我从 子类化时XElementDataTemplate适用于XElement将元素名称用作 的DataType,不适用于子类。任何想法?

0 投票
2 回答
17219 浏览

wpf - 带有 DataTemplates 的 WPF ListBoxItems - 如何从 DataTemplate 中引用绑定到 ListBoxItem 的 CLR 对象?

我有一个 ListBox,它绑定到一个ObservableCollection.

每个ListBoxItem都显示为DataTemplate. 我的 中有一个按钮,单击该按钮DataTemplate时需要引用它的成员,ObservableCollection它是 DataTemplate 的一部分。我无法使用该ListBox.SelectedItem属性,因为单击按钮时该项目没有被选中。

所以要么:我需要弄清楚如何正确设置ListBox.SelectedItem鼠标悬停或单击按钮时的设置。或者我需要找出另一种方法来获取对绑定到ListBoxItem按钮所属的 CLR 对象的引用。第二个选项看起来更干净,但任何一种方式都可能没问题。

下面的简化代码段:

XAML:

C#:

0 投票
1 回答
1646 浏览

wpf - ListBox 的 DataTemplate 中的 WPF 访问控制

我正在构建一个 WPF 订单管理器应用程序,但我遇到了不知道如何处理的情况。

我想重新绑定每个订单的采购订单请求列表,但我只想在应用程序中显示采购订单请求面板时执行此操作(他们双击订单以显示采购订单请求列表)。我遇到的问题是采购订单请求是订单列表框的每个列表项内的列表框,我找不到遍历列表项中的控件的方法(我只能遍历实际对象,例如 OrderInfo)。

我想做的是

crm 示例,其中 2 个订单显示采购订单请求,1 个订单不显示任何 替代文本 http://www.readyflowers.co.uk/images/crm-datatemplate.png

结果我想实现 替代文本 http://www.readyflowers.co.uk/images/crm-datatemplate-saved.png

0 投票
3 回答
14265 浏览

wpf - 根据子对象类型选择 DataTemplate

我想对 ItemsCollection 进行数据绑定,但不是渲染集合项,而是渲染通过集合项上的属性到达的子对象。

更具体地说:这将是游戏的 2D 地图查看器(尽管在当前状态下它还不是 2D)。我将 ItemsControl 数据绑定到 ObservableCollection<Square>,其中 Square 有一个名为 Terrain(Terrain 类型)的属性。地形是一个基类,并有各种后代。

我想要的是 ItemsControl 从每个集合元素呈现 Terrain 属性,而不是集合元素本身。

我已经可以完成这项工作,但需要一些不必要的开销。我想知道是否有消除不必要开销的好方法。

我目前拥有的是以下类(简化):

还有一个名为 MapView 的 UserControl,包含以下内容:

鉴于此代码,如果我这样做:

我得到的东西看起来完全符合我的预期:一个 StackPanel,其中包含一个棕褐色盒子(用于 Dirt)和一个银色盒子(用于 SteelPlate)。但我得到了不必要的开销。

我特别关心的是我的 Square 数据模板:

我真正想说的是“不,不要费心渲染 Square 本身,而是渲染它的 Terrain 属性”。这接近于这个,但是这为每个 Square 的可视化树添加了两个额外的控件:一个 ContentControl,如上面 XAML 中明确编码的那样,以及它的 ContentPresenter。我在这里并不特别想要 ContentControl;我真的很想短路并将 Terrain 属性的 DataTemplate 直接插入到控件树中。

但是我如何告诉 ItemsControl 渲染 collectionitem.Terrain (从而查找上述地形对象的 DataTemplate 之一)而不是渲染 collectionitem (并为 Square 对象寻找 DataTemplate)?

我想将 DataTemplates 用于地形,但完全不一定用于 Square——这只是我发现的第一种有效的方法。事实上,我真正想做的是完全不同的事情——我真的想将 ItemsControl 的 DisplayMemberPath 设置为“Terrain”。这会直接呈现正确的对象(Dirt 或 SteelPlate 对象),而无需添加额外的 ContentControl 或 ContentPresenter。不幸的是,DisplayMemberPath 总是呈现一个字符串,而忽略了地形的 DataTemplates。所以它有正确的想法,但对我来说没用。

这整个事情可能是过早的优化,如果没有简单的方法来获得我想要的,我会接受我所拥有的。但是,如果有一种“WPF 方式”我还不知道要绑定到属性而不是整个集合项,它将增加我对 WPF 的理解,这正是我所追求的。

0 投票
4 回答
61183 浏览

wpf - 如何让 DataTemplate.DataTrigger 检查大于或小于?

如果年龄等于30 ,则以下DataTemplate.DataTrigger使年龄显示为红色。

如果年龄大于30 ,如何使年龄显示为红色?

0 投票
3 回答
12478 浏览

c# - 如何更新 ObservableCollection 的现有元素?

我有一个绑定到 WPF 列表框的 ObservableCollection 实例,该列表框具有两个单独的数据模板(一个用于显示,一个用于编辑)。用于编辑的数据模板在文本框上有一个单向绑定和一个保存按钮。

我需要进行哪些更改,以便当我按下保存按钮时(将列表项置于编辑模式后),我更改文本框的值以替换 ObservableCollection(和显示)中的值?