1

内のオブジェクトのコレクションにバインドされている がありdatagridます。itemsSourceCustomerViewModel

CustomerオブジェクトにIsCompleteは、ブール値であるプロパティ (データグリッドに表示されている列ではない) があります。IsCompletefalseの場合、行全体を赤くするにはどうすればよいですか?

私はMVVMの概念に慣れていないので、まだ頭を悩ませています。これまでに見た例では、単一のプロパティの内容に応じて行全体を色分けしているようには見えません。

それが必要な場合は、喜んでリファクタリングします。

ありがとう!

4

2 に答える 2

2

これにはRowStyleSelectorを使用してみます。さまざまな行スタイルを定義し、その行のデータに応じて行ごとに 1 つを選択できます。

基本的に、 を継承するクラスを定義しStyleSelector、メソッドをオーバーライドしますSelectStyle。行データに基づいてスタイルを選択するロジックを配置する場所です。行データitemが含まれています。

public class MyStyleSelector : StyleSelector
{
    public override Style SelectStyle(object item, DependencyObject container)
    {
        if (item is Customer)
        {
            return ((Customer)item).IsComplete ? 
                App.Current.Resources["RedRowStyle"] :
                App.Current.Resources["NormalRowStyle"]
        }
        return base.SelectStyle(item, container);
    }
}

リソースをアプリケーションのリソース ディクショナリに追加します。

<Application.Resources>
    <Style TargetType="DataGridRow" x:Key="NormalRowStyle">
    </Style>
    <Style TargetType="DataGridRow" BasedOn="{StaticResource NormalRowStyle}" x:Key="RedRowStyle">
        <Setter Property="Background" Value="Red" />
    </Style>
</Application.Resources>

次に、次のような静的リソースを介してセレクターを参照します。

<Window>
    <Window.Resources>
        <local:MyStyleSelector x:Key="MyStyleSelector" />
    </Window.Resources>

    <DataGrid RowStyleSelector="{StaticResource MyStyleSelector}">
        <!-- ... -->
    </DataGrid>
</Window>
于 2013-02-06T18:03:14.953 に答える
1

MVVM スタイルで、CustomerViewModel を作成し、プロパティ CustomerColor を定義します (IsComplete プロパティ値に関連)。

これを試して:

<DataGrid>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="Background">
               <Setter.Value>
                   <SolidColorBrush Color="{Binding CustomerColor}"/>
              </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>
于 2013-02-06T18:09:25.907 に答える