在Silverlight DataGrid中循环遍历行

3

我觉得我可能漏了一些显而易见的东西,但我找不到遍历DataGridRow集合的方法。我的DataGrid有一个项目数据源,它是我设置的类的集合。我正在尝试遍历行并突出显示符合特定条件的任何行,但我无论如何都看不到该怎么做。

2个回答

2
您不需要遍历网格。这是老式的WinForms思维方式。WPF和Silverlight中的网格已经重新设计,考虑了MVVM;关注点分离。您可以直接使用绑定到网格上的对象进行操作,而无需操纵网格。因此,网格只成为一个呈现问题。它的职责是读取对象并根据这些对象中的数据显示信息。
相反,您需要做的是将属性附加到要绑定的对象,并让网格基于这些设置设置颜色/字体等样式。为此,您需要创建一个IValueConverter。
以下是我在WPF和Silverlight datagrid中使用的转换器示例:
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中的datagrid声明中,我指定了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>

因此,转换器会执行这项工作。它读取状态对象的值(该对象是我的AgentState对象的子对象,该网格将绑定到该对象的集合上)。转换器读取状态的值并返回用于设置行的颜色的字符串表示形式,以供网格使用。
希望这有所帮助。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接