2012-04-12 7 views
2

У меня есть элемент управления DataGrid, связанный с ItemsSource. Мой ItemsSource - ObservableCollection, и он, и я всегда вставляю свои предметы, заказанные на нем. Мне нужно установить фон каждой строки DataGrid в зависимости от значения и его индекса в DataGrid. Знаете ли вы, как это сделать? Примечание: ObservableCollection будет обновляться другим потоком, поэтому, когда он обновляется, я должен обновить цвет фона сетки.Динамический ряд фона datagrid Silverlight

Я видел, как некоторые люди делали подобные вещи с помощью конвертера, но вся моя бизнес-логика находится в ViewModel, и мне нужно получить от нее значения, чтобы узнать, какой цвет будет фоном.

Заранее спасибо.

ответ

1

Вы можете добавить обработчик событий LoadingRow к вашему DataGrid, а затем настроить привязку к свойству фона каждой строки на вид модели собственности их соответствующего элемента:

XAML DataGrid:

<data:DataGrid ItemsSource="{Binding FooBars}" LoadingRow="dataGrid_LoadingRow" > 
    <data:DataGrid.Columns> 
     <data:DataGridTextColumn Header="FOO" Binding="{Binding Foo}" Width="200" /> 
     <data:DataGridTextColumn Header="BAR" Binding="{Binding Bar}" Width="60"/> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

Code-за :

private void packetsDataGrid_LoadingRow(object sender, DataGridRowEventArgs e) 
{ 
    Binding backgroundBinding = new Binding("FooBarItemBackground"); 
    backgroundBinding.Source = e.Row.DataContext; 
    e.Row.SetBinding(DataGridRow.BackgroundProperty, backgroundBinding); 
} 
+0

Есть проблема ... например: при добавлении новой строки мне нужно обновить каждую строку ниже, чтобы обновить ее фон. – Augusto

+0

Нет проблем :) Когда добавляется новая строка, которая может вызвать событие в вашей модели просмотра, чтобы обновить свойство цвета фона для каждого элемента. Поскольку данные привязаны к данным, вам не придется перепроверять сетку или что-то еще. – KodeKreachor

+1

Это звучит так, как я использую, и это должен быть путь – Stainedart

Смежные вопросы