0

ItemsSource がコード ビハインドの製品リストにバインドされている WPF DataGrid があります。

私の目標は、多くの問題に直面しているようですが、chkLowInventory がチェックされると、DataGrid の在庫 <= min_quantity のすべての行のフォントの色が赤に変更され、チェックを外すと元に戻ります。

myDataGrid.ItemContainerGenerator.ContainerFromItem(myProduct) を使用して DataGridRow を取得しようとしましたが、myDataGrid.UpdateLayout() および myDataGrid.ScrollIntoView(myProduct) を呼び出しても、特定の数の製品の後に null を返します。

どんな提案も素晴らしいでしょう。

        <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