wpf datagrid单元格中的绑定背景值



我在VS2015中有一个WPF应用程序。它是作为MVVM开发的,在代码范围内没有任何内容。

它具有包含datagrid的用户控件。我希望任何编辑的单元格的背景颜色都可以从白色变为红色。我在视图模型中有一个按钮绑定到方法,该按钮将更改的数据应用于数据库。

我的问题是背景 datagrid列的属性。

我的ViewModel包含:

private ObservableCollection<ComparisonRec> _piToAccessFilteredRecs;

contamisonRec实施 cliententitybase

public class ComparisonRec : ClientEntityBase

这具有 isdirty 属性

我有以下 valueconverter 类:

public class DirtyToBrushConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            Brush ret;
            if ((bool)value == true)
            {
                ret = Brushes.Red;
            }
            else
            {
                ret = Brushes.White;
            } 
            return ret;
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }

我的用户控件的数据上下文设置如下:

    <UserControl.DataContext>
        <local:CompareUCViewModel />
    </UserControl.DataContext>

在datagrid中,我具有绑定:

ItemsSource="{Binding PiToAccessFilteredRecs}"

对于 datagridtextcolumn ,我需要突出显示一个更改,我具有以下绑定:

Binding="{Binding Path=Access_Notes, Mode=TwoWay, UpdateSourceTrigger=LostFocus}">

这可以很好地显示数据。为了尝试获得突出显示,我添加了以下内容:

<DataGridTextColumn.ElementStyle>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Setter Property="Background" Value="{Binding Access_Notes.IsDirty, Converter={StaticResource DirtyToBrushConverter}}" />
                                </Style>
                            </DataGridTextColumn.ElementStyle>

它不起作用:(我在显示的每一行的输出窗口中看到以下内容:

System.Windows.Data Error: 40 : BindingExpression path error: 'IsDirty' property not found on 'object' ''String' (HashCode=577941586)'. BindingExpression:Path=Access_Notes.IsDirty; DataItem='ComparisonRec' (HashCode=27207830); target element is 'TextBlock' (Name=''); target property is 'Background' (type 'Brush')

任何人都可以看到我出错的地方吗?

编辑根据@xamimax的建议,如果我更改绑定到:

<Setter Property="Background" Value="{Binding Access_Notes

access_notes的字符串值(网格单元格中将要显示的内容(传递给值转换器,并且会抛出异常,因为它不能施加到(bool(

我在这里找到答案:绑定到对象的属性

因为datagridtextcolumn已经与access_notes绑定,这意味着我的设置者只需要绑定到ISDIRTY属性,如下所示:

Value="{Binding IsDirty

为了完整性,我的工作XAML如下:

<DataGridTextColumn x:Name="access_NotesColumn" Width="SizeToHeader" Header="Access Notes" Binding="{Binding Path=Access_Notes, Mode=TwoWay, UpdateSourceTrigger=LostFocus}">
                                <DataGridTextColumn.ElementStyle>
                                    <Style TargetType="{x:Type TextBlock}">
                                        <Setter Property="Background" Value="{Binding IsDirty, Converter={StaticResource DirtyToBrushConverter}}" />
                                    </Style>
                                </DataGridTextColumn.ElementStyle>
                            </DataGridTextColumn>

最新更新