gpt4 book ai didi

silverlight - DataGridCell 内容模板选择器 Silverlight

转载 作者:行者123 更新时间:2023-12-04 02:35:50 24 4
gpt4 key购买 nike

我有一个包含动态数据(自定义数据行的集合)的 DataGrid,我从服务器获取这些数据。 DataRow 有一个索引器和一个属性 Data,它返回绑定(bind)的整个数据行(您将在下面看到)

我以这种方式创建 DataGrid 的每一列:

DataGridTextColumn column = new DataGridTextColumn();    
Binding binding = new Binding("Data[" + i.ToString() + "]");
binding.Mode = BindingMode.TwoWay;
binding.Converter = _dataContextSelector;
binding.ConverterParameter = dataColumn;
column.Binding = binding;

我需要做什么:我需要根据转换器返回的数据以不同的方式显示 DataGridCells 的内容。
我编写了模板选择器(它继承了 ContentControl)并以这种方式将它放在 DataGridCell 的 ContentTemplate 属性中:

<Style TargetType="sdk:DataGridCell">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<view:DataGridCellTemplateSelector Content="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>

在这种情况下,我将整个 DataRow 作为我的选择器的内容(无法理解为什么,因为该列绑定(bind)在行的一个项目上)并且我的转换器没有被调用。整个数据行是默认的 DataContext,所以我想,在这种情况下,我的代码隐藏绑定(bind)只是被忽略了。
所以我尝试将我的模板选择器放到 DataGridCell 的 ControlTemplate 中:

<Style TargetType="sdk:DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridCell">
<view:DataGridCellTemplateSelector Content="{TemplateBinding Content}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

但在这种情况下,我将带有空文本的 TextBlock 作为我的选择器的内容(震惊)。内容更改后调用转换器。如何创建模板选择器,它将根据我的绑定(bind)数据(调用转换器后)选择模板?

最佳答案

  • 考虑使用隐式数据模板而不是自定义模板选择器。
  • 创建自定义 DataGridBoundColumn 并覆盖 GenerateElement。
  • 在 GenerateElement 中,返回一个 ContentControl。您必须使用自定义列的 Binding 属性绑定(bind)该 ContentControl 的 Content 属性。
    • 如果使用隐式数据模板,到此为止就完成了。
    • 如果使用您自己的 DataGridCellTemplateSelector,那么,只需使用它而不是上面提到的普通 ContentControl。

隐式数据模板看起来像这样(注意,它们是没有 x:Key 的资源):

<UserControl.Resources>
<DataTemplate DataType="ViewModel:Contact">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding City}"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>

关于silverlight - DataGridCell 内容模板选择器 Silverlight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7554673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com