所以我遇到了触发数据触发器的问题,因为我似乎无法在嵌套类中设置属性的路径。这就是我目前的触发器:
<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,它可以工作。如果在这个问题上可以解决任何问题,我会很感激!
答案 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");
}
}