1

我有一个 WPF Caliburn.Micro 应用程序。我曾经有一个DataGrid,这是代码的一部分:

<DataGrid x:Name="FirstEntries" Grid.Row="5"
      AutoGenerateColumns="False"
      BaseControls:DataGridExtension.Columns="{Binding FirstEntryGridColumns}"
      CanUserAddRows="False" IsReadOnly="True"
      SelectedItem="{Binding Path=SelectedFirstEntry}">
  <DataGrid.Resources>
      <conv:StatusToBackgroundColorConverter x:Key="StatusToBackgroundColor"/>
  </DataGrid.Resources>
  <DataGrid.ItemContainerStyle>
      <Style TargetType="{x:Type DataGridRow}">
          <Style.Setters>
              <Setter Property="Background" Value="{Binding Path=Status, Converter={StaticResource StatusToBackgroundColor}}"></Setter>
              <Setter Property="cal:Message.Attach" Value="[Event MouseDoubleClick] = [Action OnDoubleClickFirstEntry($dataContext)]"/>
          </Style.Setters>
      </Style>
  </DataGrid.ItemContainerStyle>

可以看到每一行的背景色都绑定了Status字段值,并且处理了一个双击事件。现在我正在迁移到 ComponentOne 的 FlexGrid,但我不知道如何在那里实现相同的目标,因为 FlexGrid 似乎不知道 ItemContainerStyle。

你能帮我解决这个问题吗?谢谢。

4

2 回答 2

1

C1 FlexGrid 出于性能原因做一些“WinFormsy”的事情,并且不使用 DependencyProperties 或样式/模板,因此您不能使用数据触发器来设置行背景或将命令设置为您想要的事件。他们的建议是使用 Cell 的 mouseclick 事件在代码中处理这一切。

如果可能的话,我的建议是回到 W​​PF 4.0 的 DataGrid 并绑定到 ICollectionView 以利用它的过滤功能。链接是 Bea Stollnitz 的许多关于操作集合视图的教程。

于 2012-08-08T20:34:42.077 回答
1

你有没有看过CellFactory类和ICellFactory接口。我用它来根据我的一个项目中的项目状态设置不同的背景颜色。

Public Overrides Sub CreateCellContent(grid As C1.WPF.FlexGrid.C1FlexGrid, bdr As Border, rng As C1.WPF.FlexGrid.CellRange)
        MyBase.CreateCellContent(grid, bdr, rng)

        Dim infPre As InfPresenterTextEntity
        infPre = CType(grid.Rows(rng.Row).DataItem, InfPresenterTextEntity)

        If Not infPre Is Nothing Then
            If infPre.IsNew Then
                grid.Rows(rng.Row).Background = Brushes.LightGreen
            ElseIf infPre.IsDirty Then
                grid.Rows(rng.Row).Background = Brushes.LightYellow
            End If

            'grid.AutoSizeRow(rng.Row, 0)
            'grid.AutoSizeRows(rng.Row, rng.Row, 0)
        End if 
End Sub
于 2012-10-22T10:08:08.803 回答