XAML中的WPF文本块绑定

时间:2013-10-08 12:44:47

标签: c# wpf xaml data-binding textblock

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

5 个答案:

答案 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" />