Стиль Silverlight DataGrid - PullRequest
       7

Стиль Silverlight DataGrid

1 голос
/ 13 февраля 2009

У меня есть DataGrid, у которого ItemsSource связан с изменяющейся коллекцией Observable. Внутри этой коллекции находится бизнес-объект. Основываясь на некоторых значениях свойств бизнес-объекта, я хотел бы иметь возможность изменять цвет текста для каждого элемента, отображаемого в моей DataGrid, после создания ItemsSource.

Кто-нибудь делал это раньше или сталкивался с чем-то подобным? Заранее спасибо.

<DataTemplate x:Key="MyTemplate">
        <Grid x:Name="LayoutRoot">
            <TextBlock Text="{Binding MyText}" 
                       Foreground="{Binding MyStatus, Converter={StaticResource colorConverter}}" />
        </Grid>
    </DataTemplate>

Я добавил вышеуказанный код и вставил TemplateColumn в сетку, как показано ниже:

<data:DataGridTemplateColumn Header="Testing"
                                                 CellTemplate="{StaticResource MyTemplate}"/>

Код работает нормально и извлекает правильный текст, но конвертер никогда не срабатывает, и привязка переднего плана никогда не вызывается при его получении.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2009

Добавление к ответу БК:

Вы можете создать DataGridTemplateColumn и указать шаблон данных для ячеек в столбце. В шаблоне данных вы можете привязать цвет текста.

<swcd:DataGrid ... >
    <swcd:DataGrid.Columns>
        <swcd:DataGridTemplateColumn Header="MyColumn" CellTemplate="{StaticResource MyColumnDataGridCellTemplate}"/>
         ...

в ресурсах:

<DataTemplate x:Key="MyColumnDataGridCellTemplate">
    <Grid>
         <TextBlock Text="{Binding someproperty}" Foreground="{Binding someotherproperty, Converter={StaticResource MyConverter}}"/>
          ...
0 голосов
/ 13 февраля 2009

Да. Используйте Преобразователь значений при привязке данных.

<UserControl.Resources>
    <myconverters:BackColor x:Key="BackColor" />
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="{Binding SomeValue, Converter={StaticResource BackColor}" >
</Grid>

Затем ваш класс конвертера реализует IValueConverter и возвращает какой-либо объект Brush. Обычно вам не нужно реализовывать ConvertBack ()

...