我有一个 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 标志应用该样式。