我有一份物品清单
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>当模型更改时,这不会刷新UI (DockStatus更改)
<DataGridTemplateColumn Header="V" Width="25" IsReadOnly="True" CellEditingTemplateSelector="{StaticResource DockIconCellTemplateSelector}}">发布于 2012-07-23 11:29:12
如果只选择特定项目的适当背景颜色,或使用特定StatusId的项目,则可以编写绑定转换器。该转换器将简单地将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();
}
}您可以这样修改您的绑定:
<Rectangle Fill="{Binding Status.StatusId, Converter={StaticResource StatusColorConverter}}" /> https://stackoverflow.com/questions/11611326
复制相似问题