WPF DataTrigger Setter方法绑定

时间:2014-11-11 15:10:49

标签: wpf setter datatrigger

我想根据使用Style更改的值显示不同的单元格背景颜色。这是我的代码。我的数据结构实现了INotifyPropertyChanged,每当属性发生变化时,它都会引发通知(例如HasChange)。因此我假设当HasChange被更改时,它将调用MyDummy转换器,它总是返回true,然后调用设置方法,MyConverter将计算出为背景绘制的颜色。

当应用程序启动时,它工作正常并显示正确的颜色。但是,当我更改任何单元格数据时,会执行MyDummy,但MyConverter永远不会再被调用。任何的想法? (请忽略RowData.Row,它们是datarow的DevExpress控件的一部分)。感谢。

解决方案:是使用Data而不是DataRow.Row

    <local:MyColorConverter x:Key="MyConverter"/>
    <local:MyDummy x:Key="MyDummy"/>
    <Style TargetType="dxg:CellContentPresenter" x:Key="cellstyple">
        <Style.Triggers>
            <DataTrigger Value="true" Binding="{Binding RowData.Row.HasChange, Converter={StaticResource MyDummy}}">
                <Setter Property="Background">
                    <Setter.Value>
                        <MultiBinding Converter="{StaticResource MyConverter}">
                            <Binding Path="RowData.Row"/>
                            <Binding Path="Column.FieldName"/>
                        </MultiBinding>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>

我使用的数据结构

public class MyStr : INotifyPropertyChanged
{
    private string _Name;
    public String Name
    {
        get
        {
            return _Name;
        }
        set
        {
            _Name = value;
            HasChange = true;
        }
    }
    public String City { get; set; }
    private bool _hasChange;
    public bool HasChange
    {
        get
        { return _hasChange; }
        set
        {
            _hasChange = value;
            NotifyChange("HasChange");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyChange(String name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }

}

0 个答案:

没有答案