0

我有一个 WPF DataGrid,其 ItemsSource 绑定到后面代码中的产品列表。

我的目标(我似乎遇到了很多问题)是,当检查 chkLowInventory 时,DataGrid 中所有行的字体颜色(stock <= min_quantity)都将更改为红色,然后在未选中时返回。

我尝试使用 myDataGrid.ItemContainerGenerator.ContainerFromItem(myProduct) 获取 DataGridRow,但它在一定数量的产品后返回 null,即使我调用 myDataGrid.UpdateLayout() 和 myDataGrid.ScrollIntoView(myProduct) 也是如此。

任何建议都会很棒。

        <DataGrid x:Name="dgProducts"
              Height="360"
              Margin="20,65,20,0"
              VerticalAlignment="Top"
              AlternatingRowBackground="#FFE6E6E6"
              AutoGenerateColumns="False"
              Background="#FFC1BFB3"
              CanUserAddRows="False"
              CanUserReorderColumns="False"
              CanUserResizeColumns="False"
              CanUserResizeRows="False"
              FontFamily="Euphemia"
              FontSize="14"
              ItemsSource="{Binding Path=Products}"
              SelectedItem="{Binding Path=CurrentProduct}"
              SelectionMode="Single"
              Style="{DynamicResource BridalStyleDatagridProducts}"
              VerticalScrollBarVisibility="Visible">
        <DataGrid.Columns>
            <DataGridTextColumn Width="500"
                                Binding="{Binding Name}"
                                Header="Description" />
            <DataGridTextColumn Width="200"
                                Binding="{Binding Manufacturer}"
                                Header="Manufacturer" />
            <DataGridTextColumn Width="*"
                                Binding="{Binding RetailPrice,
                                                  StringFormat=c}"
                                Header="Retail Price"
                                IsReadOnly="True" />
            <DataGridTextColumn Width="*"
                                Binding="{Binding CurrentStock}"
                                Header="Stock Qty"
                                IsReadOnly="True" />
        </DataGrid.Columns>
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                        <DataTrigger Binding="{Binding IsLowInStock}" Value="True">
                            <Setter Property="Foreground" Value="Red" />
                        </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>

    <CheckBox x:Name="chkLowInventory"
              Margin="490,24,0,0"
              HorizontalAlignment="Left"
              VerticalAlignment="Top"
              BorderThickness="2"
              Content="Show Low Inventory"
              FontFamily="Euphemia"
              FontSize="20"
              Foreground="Black"
              IsChecked="{Binding Path=ShowLowInventory}"
              TabIndex="17" />

将我的代码更新为 MVVM 方法。还是有问题。我能够获得所有库存低的行,以将前景更改为红色。但我希望能够控制何时使用 ShowLowInventory 标志应用该样式。

4

0 回答 0