如何为我的路径提供嵌套类中的属性?

时间:2016-06-16 14:27:44

标签: c# wpf

所以我遇到了触发数据触发器的问题,因为我似乎无法在嵌套类中设置属性的路径。这就是我目前的触发器:

<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Item.ColWarning.HasWarning, UpdateSourceTrigger=PropertyChanged}" Value="True">

这是我想要访问的属性:

public class Column {

    public Warning ColWarning = new Warning();

    //other stuff happens in this class

    public class Warning : BaseModel
    {

        private const string ChangedLength = "Column length will also be changed in tables: ";

        public bool HasWarning { get { return _warning == null ? false : true; } }

        private string _warning;

        public string WarningMessage { get { return _warning; } }

        public void ValidateCol(Column col)
        {
            _warning = "something";
            NotifyPropertyChanged("HasWarning");
            //actual validation stuff happens here
        }
    }
}

在这种情况下,WPF路径中的项目引用了列。另外,我知道如果我摆脱了Warning类并在Column Class中包含属性,它可以正常工作。在这种情况下,我的路径更改为Item.HasWarning,它可以工作。如果在这个问题上可以解决任何问题,我会很感激!

1 个答案:

答案 0 :(得分:0)

看起来问题是ColWarning是一个字段而不是一个属性:

public Warning ColWarning = new Warning();

Binding不会绑定到字段,只会绑定到属性。鉴于您的绑定适用于Column通过Item的其他属性,如果您将ColWarning重新定义为属性,则您获得的路径应该有效:

private Warning _colWarning = new Warning();
public Warning ColWarning {
    get { return _colWarning; }
    set {
        _colWarning = value;
        //  ...or whatever you're doing to raise PropertyChanged
        OnPropertyChanged("ColWarning");
    }
}