0

私はMVVMアプローチを使用しています。曜日の列を持つデータグリッドがあります。影付きの背景で現在の日付を強調する必要がありました。ビューモデルの他のすべてが適切に表示されているため、一般的にバインドされています。ただし、シェーディングは適用されず、プロパティにブレークポイントを設定すると、ブレークポイントにヒットしません。私は愚かなことをしていますが、何を見つけることができません。

ビューモデルの色のコードは次のとおりです。

  public Brush SundayColor { get { return GetBrushColorForWeekday(DayOfWeek.Sunday); } }

    public Brush MondayColor { get { return GetBrushColorForWeekday(DayOfWeek.Monday); } }

    public Brush TuesdayColor { get { return GetBrushColorForWeekday(DayOfWeek.Tuesday); } }

    public Brush WednesdayColor { get { return GetBrushColorForWeekday(DayOfWeek.Wednesday); } }

    public Brush ThursdayColor { get { return GetBrushColorForWeekday(DayOfWeek.Thursday); } }

    public Brush FridayColor { get { return GetBrushColorForWeekday(DayOfWeek.Friday); } }

    public Brush SaturdayColor { get { return GetBrushColorForWeekday(DayOfWeek.Saturday); } }

    private Brush GetBrushColorForWeekday(DayOfWeek dayOfWeek)
    {
        return dayOfWeek == CurrentDate.DayOfWeek ? Brushes.AliceBlue : Brushes.White;
    }

グリッド XAML には、次のものを使用しています。簡単にするために、1 つの列定義のみを示しましたが、他の 6 つは同様です。

   <DataGridTextColumn Header="Mon" Width="33" Binding="{Binding MondayQuantity,NotifyOnTargetUpdated=True}">
        <DataGridTextColumn.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="Background" Value="{Binding MondayColor}"/>
                <Setter Property="Foreground" Value="Black"/>
            </Style>
        </DataGridTextColumn.CellStyle>
    </DataGridTextColumn>

バインディングを固定色に変更したかのようにスタイルが機能することはわかっています。選択した色が表示されます。では、なぜバインディングが機能しないのでしょうか?

編集

私は愚かだった !色のプロパティは、グリッドがバインドされているアイテムではなく、ビューモデルに直接あります。

グリッドがバインドされている監視可能なコレクションの外部にあるビューモデルのアイテムにグリッド スタイルをバインドすることは可能ですか? 私は、「1レベルアップ」が私が求めているものだと思います:

ビューモデル

  • mondaycolor など <-- スタイルをこれにバインド

  • items observablecollection <-- グリッド内のデータはこれから

4

1 に答える 1

1

私はコンバーターを使い慣れているので...そのようなことを考えています(疑似コード)

Xaml:

<Setter Property="Background" Value="{Binding Parameter="Monday",
                                      Converter={StaticResource currentDayToColorCOnverter}}"/>

コンバータ:

class CurrentyDayToColorConverter : IValueConverter
{
    public object Convert(blablabla, .., object parameter)
    {
        if (CurrentDate.DayOfWeek == parameter) // may not be exactly that but you get the idea
        {
             return Brushes.AliceBlue;
        }
        else
        { 
              return Brushes.White
        }
    }
}
于 2012-08-17T09:05:21.177 に答える