为什么我的WPF数据网格背景颜色没有绑定?

时间:2012-08-17 08:43:51

标签: wpf data-binding

我正在使用MVVM方法。我有一个带有列的数据网格,用于一周的日子。我想以阴影背景突出当前的一天。 viewmodel中的其他所有内容都正常显示,因此它通常具有绑定性。但是,阴影永远不会应用,如果我在我的属性中放置断点,则永远不会触发断点。我做了一些愚蠢的事,但无法发现什么。

这是我在viewmodel中的颜色代码:

  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>

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

修改

我是个傻瓜!颜色属性直接在我的viewmodel中,而不是在网格绑定的项目中。

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

视图模型

  • mondaycolor等&lt; - 将样式绑定到此

  • items observablecollection&lt; - 网格中的数据来自此

1 个答案:

答案 0 :(得分:1)

我习惯使用转换器......我正在考虑这样的事情(psoeudo-code)

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