2013-02-21 7 views
1

Я использую архитектуру MVVM, и я хочу изменить цвет строки в datagrid. Цвет строки зависит от элемента модели.Строка DataGrid Цвет фона MVVM

до сих пор у меня есть этот код:

private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e) { 
     Log4NetLog dataGridRow = e.Row.DataContext as Log4NetLog; 
     if (highlight) { 
      if (dataGridRow != null) { 
       e.Row.Background = new SolidColorBrush(
        dataGridRow.LogColour.Colour); 
      } 
     } else { 
      e.Row.Background = new SolidColorBrush(Colors.White); 
     } 
} 

Как вы можете видеть, во второй линии я должен сделать ссылку на Log4NetLog, который находится в модели.

Так как я могу изменить код для адаптации шаблона MVVM?

+0

Можете ли вы разместить больше кода для этого? Откуда взялась подсветка? Чтобы сделать это, адаптируя шаблон MVVM, вы можете установить шаблон DataGridRow для изменения значения цвета фона на основе привязки к свойству в DataContext ViewModel. Ознакомьтесь с http://msdn.microsoft.com/en-us/library/cc278066%28v=vs.95%29.aspx. – Dutts

+0

highlight - это просто логическое ... вы можете просто игнорировать его. его не imoportant – RayOldProf

+0

Хорошо, но по существу вам нужно некоторое свойство в вашей модели viewmodel, с которой вы можете привязать, через ValueConverter, чтобы вернуть цвет. – Dutts

ответ

2

Я предполагаю, что ваш DataGrids ItemsSource привязан к коллекции Log4NetLog, так что вы можете сделать укладку в XAML:

 <DataGrid.ItemContainerStyle> 
      <Style TargetType="{x:Type DataGridRow}"> 
       <Setter Property="Background" Value="{Binding Path=LogColour.Colour}"/> 
      </Style> 
     </DataGrid.ItemContainerStyle> 

Может быть, вам нужен цвет для SolidColorBrush конвертер.

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