2012-02-18 2 views
0

Я пытаюсь достичь этого: Когда пользователь выбирает одну или несколько ячеек в DataGrid, все дубликаты должны иметь свой цвет фона, измененный.Изменение цвета фона для ячейки WPF DataGrid в зависимости от выбора и значения

У меня есть этот XAML

<Window x:Class="NotesOnFretboard.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="true" Margin="12,110,12,29" Name="dataGrid1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" IsReadOnly="True" /> 
    </Grid> 
</Window> 

код позади:

public MainWindow() 
{ 
    InitializeComponent(); 
    DataTable dt = CreateDataTable(); 

    dataGrid1.ItemsSource = dt.DefaultView; 
} 

Так что я заселить DataGrid с помощью DataTable (10 строк, 25 столбцов). В этом datatable имеется несколько повторяющихся значений.

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

Пожалуйста, помогите!

// Андерс

+0

что вы привязки к? какова структура данных? это может быть гораздо легче отразить в структуре данных. –

+0

Структура данных представляет собой ObservablCollection >. Где Примечание - класс Примечание {public string Name {get; задавать; } public int Octave {get; задавать; } public int Midi {get; задавать; }} Но так как я не нашел способа показать список списков в DataGrid, я создаю DataTable, используя свойство Name. Дубликаты будут в собственности Midi – Andis59

ответ

1

вы должны использовать триггеры для достижения этой проверить это полное руководство: Styling Microsoft’s WPF datagrid

+0

Спасибо за ваш ответ! Я посмотрю и попробую это ... – Andis59

1

Вы можете изменить класс коллекции, так что он имеет свойство, чтобы указать, должен ли он быть выделен или нет, затем привяжите это свойство (через конвертер) к свойству element, которое вы хотите изменить цвет. Вы могли бы отреагировать на выбор/клик и изменить свой собственный атрибут ItemSource на true/false в зависимости от любых критериев, которые вы хотите.

Так что-то вроде:

<sdk:DataGrid x:Name="NoteList" 
    AutoGenerateColumns="False" 
    GridLinesVisibility="None" 
    HeadersVisibility="None" 
    IsReadOnly="True" 
    ItemsSource="{Binding NoteList,Mode=OneWay}"> 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTemplateColumn Width="Auto"> 
      <sdk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBox Text="{Binding NoteDescription, Mode=OneWay}" 
          Background="{Binding NoteHighlighted, 
           Converter={StaticResource BooleanToColourConverter}}"/> 
       </DataTemplate> 
      </sdk:DataGridTemplateColumn.CellTemplate> 
     </sdk:DataGridTemplateColumn> 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid> 
Смежные вопросы