2

我正在更新一些现有的 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 文本块绑定中引用它。谁能告诉我我会怎么做?谢谢!

4

5 回答 5

5

你可以简单地输入这个:

<TextBlock Text="{Binding ObjectA.PropertyNameHere"/>

您可能希望INotifyPropertyChanged在您的类中实现,因为您的类中的方法ObjectA不会拾取类的更改属性。PropertyChangedMyBusinessObject

于 2013-10-08T12:47:51.657 回答
5

<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();
}
于 2013-10-08T13:16:54.253 回答
3

尝试以与 PropertyA 相同的方式实例化 ObjectA(即,作为属性,具有公共 getter/setter,并调用 OnPropertyChanged),那么您的 XAML 可以是:

<TextBlock Text="{Binding ObjectA.PropertyNameHere}" />
于 2013-10-08T12:47:07.443 回答
1

PropertyA您可以像以下那样做同样的事情,

OnPropertyChanged(new PropertyChangedEventArgs("ObjectA"));

在设计器 XAML 上,

<TextBlock x:Name="ObjectAProperty" Text="{Binding ObjectA.PropertyNameHere}" />
于 2013-10-08T12:47:15.247 回答
1

Try this:

In code:

public MyBusinessObject Instance { get; set; }

Instance = new MyBusinessObject();

In XAML:

<TextBlock Text="{Binding Instance.PropertyNameHere" />
于 2013-10-08T12:48:48.160 回答