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,我使用以下内容。为了简单起见,我只展示了一个列定义,但其他六个类似:

   <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>

我知道样式就像我将绑定更改为固定颜色一样工作,我看到了选择的颜色。那么为什么我的绑定不起作用?

编辑

我是愚蠢的!颜色属性直接在我的视图模型中,而不是在网格绑定的项目中。

是否可以将网格样式绑定到视图模型中位于网格绑定到的 observablecolleciton 之外的项目?我想,“上一级”是我所追求的:

视图模型

  • mondaycolor 等 <-- 将样式绑定到此

  • items observablecollection <--网格中的数据来自这个

    • 数量
4

1 回答 1

1

我习惯于使用转换器,所以......我正在考虑类似的事情(伪代码)

xml:

<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 回答