0

私はアイテムのリストを持っています

public List<Item> MyItems { get; set; }

DataGrid に表示されます。1 つの列には、テンプレートによって定義されたステータス「アイコン」が表示されます。コードは次のようになります。

列テンプレート [...]

<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特定のアイテム、または特定. コンバーターは単純に を に変換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}}" /> 
于 2012-07-23T11:29:12.297 に答える