我正在更新一些现有的WPF代码,我的应用程序有许多像这样定义的文本块:
<TextBlock x:Name="textBlockPropertyA"><Run Text="{Binding PropertyA}"/></TextBlock>
在这种情况下,“PropertyA”是我的业务类对象的属性,定义如下:
public class MyBusinessObject : INotifyPropertyChanged
{
private void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
private string _propertyA;
public string PropertyA
{
get { return _propertyA; }
set
{
if (_propertyA == value)
{
return;
}
_propertyA = value;
OnPropertyChanged(new PropertyChangedEventArgs("PropertyA"));
}
}
// my business object also contains another object like this
public SomeOtherObject ObjectA = new SomeOtherObject();
public MyBusinessObject()
{
// constructor
}
}
现在我有一个TextBlock,我需要绑定到ObjectA的一个属性,正如你所看到的,它是MyBusinessObject中的一个对象。在代码中,我将其称为:
MyBusinessObject.ObjectA.PropertyNameHere
与我的其他绑定不同,“PropertyNameHere”不是MyBusinessObject的直接属性,而是ObjectA上的属性。我不确定如何在XAML文本块绑定中引用它。有谁能告诉我我是怎么做到的?谢谢!
答案 0 :(得分:4)
您只需输入以下信息:
<TextBlock Text="{Binding ObjectA.PropertyNameHere"/>
您可能希望在INotifyPropertyChanged
课程中实施ObjectA
,因为PropertyChanged
课程中的MyBusinessObject
方法无法更改课程的属性。
答案 1 :(得分:4)
在<Run Text="{Binding ObjectA.PropertyNameHere}" />
工作之前,您必须使ObjectA
本身成为属性,因为绑定只适用于属性而非字段。
// my business object also contains another object like this
public SomeOtherObject ObjectA { get; set; }
public MyBusinessObject()
{
// constructor
ObjectA = new SomeOtherObject();
}
答案 2 :(得分:2)
尝试以与为Property执行的方式相同的方式实例化ObjectS(即,作为属性,使用公共getter / setter,并调用OnPropertyChanged),然后您的XAML可以是:
<TextBlock Text="{Binding ObjectA.PropertyNameHere}" />
答案 3 :(得分:0)
您可以像PropertyA
那样做,如下所示,
OnPropertyChanged(new PropertyChangedEventArgs("ObjectA"));
在Designer XAML上,
<TextBlock x:Name="ObjectAProperty" Text="{Binding ObjectA.PropertyNameHere}" />
答案 4 :(得分:0)
试试这个:
在代码中:
public MyBusinessObject Instance { get; set; }
Instance = new MyBusinessObject();
在XAML中:
<TextBlock Text="{Binding Instance.PropertyNameHere" />