2009-11-19 5 views
1

Datagrid (wpftoolkit) обычно представляет собой совокупность объектов со строками, представляющими каждый объект, а столбцы - с соответствующими свойствами.WPF: Как выделить все ячейки DataGrid, удовлетворяющие условию?

Я не использую его таким образом. Я использую его для представления «пересечения» между двумя коллекциями. Строки представляют объекты коллекции A, а столбцы представляют объекты в коллекциях B. Ячейка в x, y представляет некоторое значение из fn (collectionA [x], collectionB [y]).

Это прекрасно работает. Теперь я хочу иметь возможность запрашивать значения ячеек. Я хочу, чтобы пользователь мог делать такие вещи, как выделить все ячейки со значением больше 0? Как это сделать с помощью datagrid?

ответ

1

Один из способов - создать шаблон ячейки данных, который ведет себя соответствующим образом (через коллекцию controltemplates.triggers).

Другой способ - создать стиль ячейки данных и использовать триггеры стиля для установки фона, когда определенное связывание имеет определенное значение (через коллекцию styles.triggers).

Или вы можете использовать гибридный подход.

Внутри шаблона ячейки данных у вас может быть элемент границы, содержащий все. Вы можете, например, создать встроенный стиль для этого пограничного элемента.

<Border Width="Auto" Height="Auto" Padding="6,10,6,10" CornerRadius="0,0,20,20"> 
    <Border.Style> 
     <Style TargetType="{x:Type Border}" > 
      <Setter Property="Background" Value="White" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Highlighted}" Value="True"> 
        <Setter Property="Background" Value="{StaticResource GreenGradientSuccessBrush}" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style>  
    </Border.Style> 
</Border> 

Если это сидит в шаблоне данных, DataContext пограничного элемента будет содержащийся объект, а триггер границы будет срабатывать, когда «Выделенные» свойство содержания (при условии, содержание класса с «Выделенное» свойство boolean) «True».

Если содержание является целым числом, и вы хотите, триггер срабатывает, когда больше нуля, вам придется использовать

<DataTrigger Binding="{Binding, Converter={StaticResource GreaterThanZeroConverter}}" Value="True"> 

где GreaterThanZeroConverter является подходящим преобразователь значений.

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