【发布时间】:2012-08-22 21:49:22
【问题描述】:
我觉得我在这里遗漏了一些明显的东西,但我找不到遍历 DataGrids DataGridRow 集合的方法。我有一个网格,其中包含我的班级集合的 itemssource。我正在尝试遍历行并突出显示任何满足特定条件但我一生都看不到的行。
【问题讨论】:
标签: c# .net silverlight silverlight-4.0
我觉得我在这里遗漏了一些明显的东西,但我找不到遍历 DataGrids DataGridRow 集合的方法。我有一个网格,其中包含我的班级集合的 itemssource。我正在尝试遍历行并突出显示任何满足特定条件但我一生都看不到的行。
【问题讨论】:
标签: c# .net silverlight silverlight-4.0
您不想遍历网格。那是老式的 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 对象的集合)。转换器读取状态值并返回颜色的字符串表示形式,以供网格用于设置行。
希望对您有所帮助。
【讨论】:
【讨论】: