我正在使用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; - 网格中的数据来自此
答案 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
}
}
}