0

我有一个物品清单

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}}">
4

1 回答 1

1

如果只是为特定项目或具有特定 的项目选择正确的背景颜色StatusId,则可以编写绑定转换器。转换器只需将 a 转换int为 a 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}}" /> 
于 2012-07-23T11:29:12.297 回答