Привязка таблицы данных к коллекции, проблема с преобразованием одного столбца - PullRequest
1 голос
/ 12 марта 2011

У меня есть одна проблема с привязкой одного столбца моей таблицы данных обычным способом.Итак, я имею в виду этот код:

<DataGridTemplateColumn Header="State">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Label Background="" Content="{Binding Path=., Converter={StaticResource measureConv}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Мой конвертер:

public class MeasureToStateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Measure m;
        try
        {
            m = (Measure)value;
            if (m.Value > 100)
            {
                return "Alarm";
            }
        }
        catch (Exception ex)
        {
            Debugger.Log(0, "Convertery", "Bład Convertera MeasureToState" + ex.Message);
        }
        return "Normal";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Свойства содержимого и фона являются пользовательскими.Я использую конвертер, чтобы проверить, удовлетворяет ли мой объект коллекции какому-либо условию end return String YES или NO, но если я хочу иметь строковое поле YES на одном цветном фоне и если это NO, то на другом цвете.

Как можноя делаю это легко?Я чувствую, что писать второй конвертер немного глупо.

Ответы [ 3 ]

1 голос
/ 12 марта 2011

Вы можете создать два DataTemplates с двумя соответствующими метками и использовать DataTemplateSelector вместо преобразователя значений, чтобы получить правильный шаблон.

0 голосов
/ 12 марта 2011

Вы можете повторно использовать конвертер для установки фона и изменения содержимого с помощью DataTrigger.
Я предположил, что поле в вашем объекте Measure называется Value.

Примените конвертер для отображения столбцасодержимое в DataGrid:

<DataGridTextColumn 
   Header="State" 
   Width="SizeToHeader"
   Binding="{Binding Value, Converter={StaticResource measureConv}}" 
   CellStyle="{StaticResource ResourceKey=BackgroundCellStyle}"
   FontSize="20" />

Применение преобразователя для изменения стиля:

<Window.Resources>
  <Style TargetType="{x:Type DataGridCell}" x:Key="BackgroundCellStyle">
    <Setter Property="Background" Value="Aqua"/>
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=Value, Converter={StaticResource measureConv}}" Value="Alarm">
        <Setter Property="Background" Value="Chartreuse"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
</Window.Resources>
0 голосов
/ 12 марта 2011

Свяжите свойство Background метки с его собственным свойством Content и используйте конвертер, чтобы вернуть желаемую кисть:

<Label Background="{Binding Path=Content, RelativeSource={RelativeSource Self}, Converter={StaticResource ContentToBrushConverter}"/>

Преобразователь получит значение свойства Content ... Если оно равно«Да» вернуть Brush.Green, если оно равно «Нет» вернуть Brush.Red

...