Прокручивать строки в Silverlight DataGrid - PullRequest
3 голосов
/ 10 января 2011

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

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Вы не хотите перебирать сетку. Это старое мышление 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). Преобразователь считывает значение состояния и возвращает строковое представление цвета для сетки, которую следует использовать для установки строки.

Надеюсь, это поможет.

0 голосов
/ 10 января 2011

Вы пробовали ClassViewSource Class?

Смотрите здесь

и как отфильтровать его, см. Ниже пост

Фильтрация с CollectionViewSource

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...