问题标签 [datatemplateselector]

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 投票
1 回答
3696 浏览

c# - DataType 的 DataTemplate - 如何在特定的 ListBox 中覆盖此 DataTemplate?

我为我的宠物项目中的一些数据类型创建了几个数据模板。这些数据模板真的很酷,因为它们像魔术一样工作,无论何时何地出现在 UI 中,都会神奇地改变数据类型实例的外观。现在我希望能够在一个特定的 ListBox 中更改这些 DataTypes 的 DataTemplate。这是否意味着我必须停止依赖 WPF 自动将数据模板应用于数据类型并将 ax:Key 分配给 DataTemplates,然后使用该键在 UI 中应用 Template/ItemTemplate?

ListBox 包含各种 DataTypes 的项目(都派生自一个公共基类),现在,所有项目都可以在不指定 TemplateSelector 的情况下神奇地工作,因为正确的模板是由 listBox 中项目的实际数据类型选择的。如果我使用 x:Key 来应用 DataTemplates,我是否需要编写一个 TemplateSelector?

我对此并不陌生,只尝试使用 DataTemplates。一瞬间我想,哇,好酷!然后我想在不同的列表框中为相同的数据类型使用不同的数据模板,哎呀,我做不到:-) 请帮忙?

0 投票
1 回答
9563 浏览

wpf - WPF:从 DataTemplateSelector 类中的 UserControl 中查找资源

我知道有这个线程:How to find a resource in a UserControl from a DataTemplateSelector class in WPF?

问同样的问题。

但是...我对答案不满意!必须有一种方法来获取资源

UserControl 包含 ContentControl/Presenter 声明:

每个派生DataTemplateSelector类在其SelectedTemplateMethod =>中都有一个参数

类型为 DependencyObject 的容器。

在我的情况下,容器是内容控件。

是否不可能从“contentcontrol”开始爬上可视化树并尝试通过 FindAncestor 获取 UserControl ?

0 投票
1 回答
2330 浏览

wpf - 我可以在 DataTemplate 中使用 DataTemplateSelector 吗?

我有一个 ItemsControl 使用 StackPanel 来显示项目列表。

我希望为每一行显示一个标签,但标签左侧的内容由 DataTemplateSelector 定义。我不想为 TemplateSelector 生成的每个 DataTemplate 重新定义标签。

这可能吗?

0 投票
1 回答
414 浏览

wpf - WPF:不同 GridView 的模板选择器

目前我有一个用户控件,它以相同的布局显示数据集合。因此,可以使用 ObjectA 的集合和 ObjectB 的另一个集合来实例化一个控件。然后我使用 TemplateSelectors 来选择正确的 DataTemplates。

后来我们认为我们应该将 List 设置为 GridView 以在列表本身中显示更多信息。但是,每种类型的对象具有不同的属性,并且列可能具有不同的名称和不同的数量。然后我意识到列等没有在 ItemTemplate 中设置但在 GridView 本身和 ListView 中当然没有自己的模板选择器。

我不知道该怎么做,但我想到了几种方法。

1)有某种我不知道的 TemplateSelector 属性。

2)我可以在 ItemTemplateSelector 上以某种方式设置它,只是不知道如何。

3)我可以动态地做 GridView(可能很困难并且不想避免)。

有什么好的方法可以做到这一点,教程或类似的方法我可以使用吗?

编辑:

由于我对 ListView 及其视图属性有了更多了解,我很确定我可以在 staticResource 中定义 gridview。我仍然喜欢 ViewSelector 或类似的东西。我想这当然不是故意的,因为该项目可能是动态的,而 Collection 不是。

但是我正在考虑可能存在更多类型的视图然后 gridview ( iconview 或其他东西)并且用户可以在它们之间切换它必须以某种方式实现的情况。

我看到的解决方案是使用触发器并将其基于集合中的第一项,但我不太喜欢。

0 投票
1 回答
1029 浏览

silverlight-4.0 - 数据模板选择器问题

在我的 Silverlight 项目中,我需要使用DataTemplateSelector. 我在这里找到了一种实现方法(因为它不存在于框架中):http: //www.codeproject.com/KB/silverlight/SLTemplateSelector.aspx

此方法在我的代码的其他地方一直可以正常工作,但这次它不起作用。问题是 TemplateSelector 从未被调用(我什至试图在构造函数中放置一个断点,但它从未被命中)。你能在我的代码中看到问题吗?我使用了调试转换器,可以看到我ListBox的 'sItemsSource设置正确。

提前致谢 !

XAML:

模板选择器类:

0 投票
1 回答
3076 浏览

c# - 根据项目类型和视图选项切换 ListBox ItemTemplate

我目前正在 WPF 中实现一个列表框,它将为其项目提供 2 种替代布局:

包装图标和详细图块的替代列表项样式

到目前为止,我已经使用 aDataTrigger来切换ItemTemplateforListBox并且运行良好:

但是,Runs列表绑定到的集合也将包含不同类型的对象:

每个对象类型都应该有自己的“平铺”和“图标”模板(总共制作 4 个模板)。根据布尔值ShowRunsAsIcons和列表项的类型切换这两个属性的最佳方法是什么?

我考虑过使用一对子DataTemplateSelector类——一个根据项目类型在图块模板之间进行选择,一个根据项目类型在图标模板之间进行选择——但这感觉非常笨拙。我觉得我应该利用 WPF 根据对象类型选择正确模板的能力,但在这种情况下,我不知道如何将它与列表的不同视图选项结合起来。

关于如何做到这一点的任何想法更符合 WPF 的精神?

谢谢。

0 投票
2 回答
6126 浏览

wpf - 如何将 WPF 控件的内容绑定到其容器的 DataContext,以便可以基于该对象应用 DataTemplateSelector?

我正在尝试在包含两个集合 A 和 B 的 ViewModel 上绑定一个 WPF 窗口。我正在尝试使用 DataTemplates 根据我的 ViewModel 中的标志设置来显示 A 或 B。

为此,我设置了窗口的DataContext = ViewModel. 但是,当我尝试将 a 绑定ContentControl到该 DataContext 并对其应用 aDataTemplateSelector时,item选择器SelectTemplate(object item, DependencyObject container)方法的参数始终为 null:

我应该如何绑定以便ContentControl将 Window 的 ViewModel 传递给它DataTemplateSelector

0 投票
1 回答
1090 浏览

wpf - 通过 DataTemplate 分隔符

我有一个ToolBar带边界的ItemsSource,我DataTemplateSelector用来确定DataTemplate运行时的(即Button/ ToggleButton)。

我想添加一个Separator DataTemplate,我该怎么做?

0 投票
1 回答
7214 浏览

wpf - WPF DataTemplate / DataTemplateSelector -- 2 个不同视图使用的 ViewModel 的最佳方法?

基本上,我有以下情况:

ViewModel: FooViewModel : BaseViewModel, BarViewModel : BaseViewModel
Views: MainView, FooView,BarView

现在我“注入”视图并设置DataContext使用DataTemplateand DataTemplateSelector。显然, myItemsControl ItemSource绑定到 a ObservableCollection<BaseViewModel>,其中它包含(目前) aFooViewModel和 a的实例BarViewModel

问题是我想介绍一个AlternateFooView我想使用的FooViewModel. 我想我会创建另一个DataTemplateDataTemplateSelector返回它,但需要有特殊的逻辑来确定要返回哪个 DataTemplate(我不能只通过哪个 ViewModel 在那里),这意味着我必须有一些BaseViewModel 中的属性或字段的类型。我不知道这是否真的是一个好主意,因为这似乎将一个字段/属性引入到仅用于选择视图的 ViewModel 中。它不会伤害我的单元测试,但包含一个字段只是为了帮助决定选择哪个 UI 视图似乎是一种浪费。我认为它不会破坏 MVVM,但我很好奇是否有人有其他更好的想法?我更不喜欢的替代想法......

想法 #2:
- 将 FooViewModel 转换为 2 个不同 FooViewModel 扩展的基类(即 BaseFooViewModel、FooViewModel、DifferentialFooViewModel)。这似乎很愚蠢,因为 FooViewModel 和 DifferentFooViewModel 除了它们的类类型之外真的没有任何区别。

想法 #3:
- 只需复制 FooViewModel 并将其设为 FooViewModel2(它将与 FooViewModel 完全相同)。这似乎比想法 2 还要糟糕。


示例代码(明显调整):


谢谢!

0 投票
1 回答
1692 浏览

wpf - WPF DataTemplateSelector 标准更改但模板未重新应用?

我有一个应用于 DataGridTemplateColumn 的 DataTemplateSelector。它正确地为我提供了一个 DataTemplate,它根据我的 DataRow(在其他列中)中的某些信息而有所不同。

到目前为止,一切都很好。

但是,当我现在更改网格中的数据时,这将导致选择器为该列选择不同的 DataTemplate,它不会自动显示这个新的 DataTemplate。

我在 Matthew MacDonald (Apress) 第 564 页的 C# 2008 中的 Pro WPF 中读到,这是已知问题,唯一的解决方法是释放选择器并重新应用它,当我的表中有很多记录时,这将非常慢。

有没有人找到解决这个问题的方法,或者在 .NET4 中有一个新功能可以解决这个问题?

谢谢

马塞尔