Вы не хотите перебирать сетку. Это старое мышление WinForms. Сетки в WPF и Silverlight были переработаны с учетом MVVM; с разделением интересов. Вместо того, чтобы манипулировать сеткой, вы работаете непосредственно с объектами, которые привязаны к сетке. Таким образом, сетка просто становится проблемой презентации. В его обязанности входит чтение объектов и отображение информации на основе данных этих объектов.
Вместо этого вы хотите прикрепить свойства к объекту, к которому привязываетесь, и задать сетку стилей для цвета / шрифта / и т. Д. На основе этих настроек. Для этого вам нужно создать IValueConverter.
Вот пример конвертера, который у меня есть в сетке данных WPF и Silverlight:
public class StateToBackgroundColorConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return Colors.White.ToString();
var state = (State) value;
return state.WebColor;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
В моем XAML я объявляю это так:
<UserControl.Resources>
<Converters:StateToBackgroundColorConverter x:Key="stateToBackgroundColorConverter"/>
</UserControl.Resources>
В объявлении сетки данных в XAML я указываю использование конвертера для DataGridRow:
<toolkit:DataGrid.RowStyle>
<Style TargetType="{x:Type toolkit:DataGridRow}">
<Style.Setters>
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Foreground" Value="{Binding AgentState.SubState, Converter={StaticResource subStateToColorConverter}}" />
<Setter Property="Background" Value="{Binding AgentState.State, Converter={StaticResource stateToBackgroundColorConverter}}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style.Setters>
</Style>
</toolkit:DataGrid.RowStyle>
Итак, конвертер работает. Он читает значение объекта State (который является дочерним объектом в моем объекте AgentState, к которому привязывается сетка; он привязывается к коллекции объектов AgentState). Преобразователь считывает значение состояния и возвращает строковое представление цвета для сетки, которую следует использовать для установки строки.
Надеюсь, это поможет.