2013-10-08 92 views
1
結合

我更新一些現有的WPF代碼和我的應用程序有很多的TextBlocks的這樣定義:WPF文本塊中的XAML

<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,我需要綁定到其中,你可以看到對象A的屬性之一,是MyBusinessObject的對象。在代碼中,我稱此爲:

MyBusinessObject.ObjectA.PropertyNameHere 

我不像其他綁定,「PropertyNameHere」不是MyBusinessObject的直接屬性,而是在對象A的屬性。我不確定如何在XAML文本塊綁定中引用它。誰能告訴我我該怎麼做?謝謝! (即作爲一個屬性,有一個公共的getter/setter方法,並調用OnPropertyChanged)

回答

3

之前<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

嘗試實例化對象A以同樣的方式,你這樣做是爲了PropertyA,那麼你的XAML可以是:

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

如您PropertyA做設計師XAML你可以做一個同樣喜歡如下,

OnPropertyChanged(new PropertyChangedEventArgs("ObjectA")); 

<TextBlock x:Name="ObjectAProperty" Text="{Binding ObjectA.PropertyNameHere}" /> 
+0

老兄,請在發佈答案之前閱讀問題。 – Sheridan

+0

是的,我知道,在propery中,他沒有把Property changed事件稱爲...所以包含了第一個,並添加了xaml –

4

你可以簡單地輸入:

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

您可能要實現你的ObjectA類中INotifyPropertyChanged,如改變類的屬性不會在你的MyBusinessObject類拾起由PropertyChanged方法。

0

試試這個:

在代碼:

public MyBusinessObject Instance { get; set; } 

Instance = new MyBusinessObject(); 

在XAML:

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