我有DataGrid,绑定到ObservableCollection。我需要将ObservableCollection提供的实体中的每个Item转换为我的自定义类型“On the fly”。为了实现这种行为,我添加了以下XAML标记:
<DataGrid x:Name="CustomGrid" ItemsSource="{Binding CollectionView}" >
<DataGrid.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding Converter={StaticResource CustomConverter}}" />
</DataTemplate>
</DataGrid.ItemTemplate>
</DataGrid>
在上面的示例中,CollectionView是ObservableCollection,CustomConverter是我自己开发的Converter 使用上面的代码,我想将CollectionView提供的每个实体转换为使用CustomConverter的另一种类型。
但是,不幸的是,代码不起作用。我在CustomConverter中设置了brekpoint,它从不调用。 它是否存在某种转换价值的方式? 谢谢
答案 0 :(得分:0)
您可能想要使用DataGridTemplateColumn.CellTemplateSelector 或DataGrid.ItemTemplateSelector
另一种选择是为每个项目创建自定义样式。假设每行具有相同的列集。
<DataGrid x:Name="CustomGrid" ItemsSource="{Binding CollectionView}" AutoGenerateColumns="True" >
<DataGrid.ItemContainerStyleSelector>
<l:DataGridItemItemStyleSelector />
</DataGrid.ItemContainerStyleSelector>
</DataGrid>
将样式定义为:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
}
public class DataGridItemItemStyleSelector : StyleSelector
{
public override Style SelectStyle(object item, DependencyObject container)
{
Employee targetIem = item as Employee;
if (targetIem != null)
{
if (targetIem.Id == 0)
{
return (Style)Application.Current.FindResource("ResourceNameDefined");
}
else
{
return base.SelectStyle(item, container);
}
}
else
{
return base.SelectStyle(item, container);
}
}
}
希望这有帮助!