WPF数据网格:每行资源?

3
有没有一种方法可以在DataGrid中每行设置一个StaticResource,并从所有列访问它?
更新
我的目的是拥有3个ComboBox列,而只有最后一个实际上与行项目绑定。
例如,DataGrid表示项目列表。我有类别->供应商->款式->完成ComboBoxes,但这些仅用于导航辅助,实际上,Item类仅具有“Finish”关系。 因此,如果每行都有一个StaticResource,我可以设置ComboBox的ItemsSource和IsSynchronizedWithCurrentItem属性,这将自动工作。
非常感谢。
4个回答

1
从技术上讲,我想你可以这样做,因为该行在可视树中。但是你想实现什么目标?可能有更好的方法。

我想做两个级联的ComboBoxes。 我将它们都放在一个DataGridTemplateColumn上,并在DataTemplate.Resources中设置了CollectionViewSource。 - Shimmy Weitzhandler
但是,为每一行都提供一个资源仍然是一个好主意,因为现在我所有的级联组合框都在一列中,如果我能够为每一行提供一个资源,我就可以将它们分开放置在不同的列中。期待您的回复。 - Shimmy Weitzhandler

0

你可以像这样在 DataGrid 级别上设置它:

xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"

<data:DataGrid x:Name="..."  ItemsSource="{Binding ...}" >
    <data:DataGrid.Resources>
    </data:DataGrid.Resources>
</data:DataGrid>

如果您定义了行模板,我会认为您可以在行级别设置它吗?


不,我希望它针对每行设置,而不是针对控件容器设置。我的目标是根据用户为此行选择的值在行内设置CollectionViewSource。 - Shimmy Weitzhandler

0

你能详细解释一下你想实现什么吗?

我认为更简单的做法是创建一个代表集合的静态资源(参见ObjectDataProvider类型),然后在XAML中将DataGrid的ItemSource属性绑定到它上面。


我想要针对每行使用其自定义数据源进行处理,看看我所做的,在Josh的回应中。 - Shimmy Weitzhandler
但是,为每一行都有一个资源仍然是一个很好的主意,因为现在我把所有级联的组合框放在了一列中,如果我能够为每一行都有一个资源,我就可以将它们分开放置在不同的列中。 期待您的回复。 - Shimmy Weitzhandler
@Shimmy:看起来你在这个任务中使用了错误的控件。你是想要一系列的组合框,其中一个选择会过滤下一个组合框的选项吗? - Gishu
我有一个显示“产品”实体的DataGrid。 我包括了这些列:供应商,样式,完成;而链条的工作方式是:Product.Finish.Style.Vendor。 因此,我想在每个列中都制作一个下拉框,根据前一个选择的值级联。 - Shimmy Weitzhandler
@Shimmy - 如果我设计Product类来公开称为Finish,Style和Vendor的属性。将数据网格的每一列绑定到相应的属性上。这些属性本身查找决定性兄弟属性并返回组合框中下拉列表的正确列表,例如Style会查找internal哈希表中this.Finish的值以获得Style值的允许选择列表。这对你有用吗? - Gishu
请查看以下链接:http://stackoverflow.com/questions/3203416/accessing-control-between-datagridcells-dynamic-cascading-comboboxes - Shimmy Weitzhandler

0

我所做的并解决了我的问题(不能保证这是正确的方法),我使用UserControl作为DataTemplate内容,将资源声明在UserControl中,然后每次都会初始化。

另一件我没有尝试过的事情是将x:Shared属性设置为false,我相信这应该有助于解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接