我有一个项目列表
public List<Item> MyItems { get; set; }
显示在DataGrid上。一列显示由模板定义的状态“图标”。 代码看起来像这样:
列模板[...]
<DataGridTemplateColumn Header="Status">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Height="18" Width="35">
<Rectangle Fill="{Binding Status.Background}" />
<TextBlock Text="{Binding Status.Text}" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
数据模型[...]
public class Item
{
public int ItemId { get; set; }
public string Name { get; set; }
public int StatusId { get; set; }
public Status Status { get; set; }
}
public class Status
{
public int StatusId { get; set; }
public int Text { get; set; }
public Brush Background
{
get
{
//Colour logic goes here
}
}
}
我想从数据模型中删除颜色逻辑并将其放入资源文件中。
<DataGridTemplateColumn Header="Status" CellTemplate="{StaticResource MyCustomTemplate}" </DataGridTemplateColumn>
我希望到目前为止我正朝着正确的方向前进,但此时我迷失了,因为我不知道如何将Status属性(或StatusId)绑定到MyCustomTemplate。
如果有人能帮助我,那就太好了。
修改
这很好用。
<DataGridTemplateColumn Header="V" Width="25" IsReadOnly="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ic:CloseIcon Visibility="{Binding DockStatus, Converter={StaticResource CloseIconDisplayVisibilityConverter}}" />
<ic:DockIcon Visibility="{Binding DockStatus, Converter={StaticResource DockIconDisplayVisibilityConverter}}" />
<ic:UndockIcon Visibility="{Binding DockStatus, Converter={StaticResource UndockIconDisplayVisibilityConverter}}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
当模型更改(DockStatus更改)时,这不会刷新UI
<DataGridTemplateColumn Header="V" Width="25" IsReadOnly="True" CellEditingTemplateSelector="{StaticResource DockIconCellTemplateSelector}}">
答案 0 :(得分:1)
如果仅为特定商品或具有特定StatusId
的商品选择正确的背景颜色,则可以编写binding converter。转换器只需将int
转换为Brush
:
[ValueConversion(typeof(int), typeof(Brush))]
public class StatusColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is int)
{
int statusId = (int)value;
// create Brush from id here and return it
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
您可以像这样修改Binding:
<Rectangle Fill="{Binding Status.StatusId, Converter={StaticResource StatusColorConverter}}" />