2010-07-20 180 views
0
屬性

基本上,我怎麼綁定(單向),以一個名爲txtFullName文本框。最初,由於ToString返回「」,文本框中的任何文本都被清除/消除。但是,當我對FirstName或LastName進行更改時,它不會更新與FullName的綁定。任何方式來做到這一點?WPF數據綁定:綁定到引用其他兩個屬性

此外,有沒有任何方式結合的方法(不只是一個場)?也就是說,將綁定直接設置爲ToString()方法,並在FirstName或LastName更改時更新它?

噢,如果有某種處理這種通用方法的話,這將是超級棒的......就像FullName字段上的屬性或ToString方法上的一個屬性,告訴它要查找哪些屬性以進行更改。

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.ComponentModel; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 

namespace AdvancedDataBinding 
{ 
    public class UserEntity 
    { 
     static UserEntity() 
     { 
      FirstNameProperty = DependencyProperty.Register("FirstName", typeof(String), typeof(UserEntity)); 
      LastNameProperty = DependencyProperty.Register("LastName", typeof(String), typeof(UserEntity)); 
     } 

     public String FirstName 
     { 
      get { return (String)GetValue(FirstNameProperty); } 
      set { SetValue(FirstNameProperty, value); } 
     } 
     public static readonly DependencyProperty FirstNameProperty; 

     public String LastName 
     { 
      get { return (String)GetValue(LastNameProperty); } 
      set { SetValue(LastNameProperty, value); } 
     } 
     public static readonly DependencyProperty LastNameProperty; 

     public String FullName 
     { 
      get { return ToString(); } 
     } 

     public override string ToString() 
     { 
      return FirstName + " " + LastName; 
     } 
    } 
} 

回答

2

如何將文本框綁定到多個值: 創建MultiValueConverter並用它來綁定到這兩個名字和姓氏。

全名不通知時,名字或姓氏的變化。在你的類中,刪除DependencyProperty的所有用法,並讓類實現INotifyPropertyChanged。當FirstName或LastName發生更改時,發佈FullName的PropertyChanged事件。將您的文本框直接綁定到FullName。

退房的ObjectDataProvider的「結合」的方法。

出這些問題的答案,我建議你做第二個的。

+0

男子正要張貼有關INotifyPropertyChanged的同樣的事情。對於3小時前提出的問題,只有6個意見,我認爲我有一個表演回答...;) – aqwert 2010-07-20 22:35:48

1

你可以使用一個MultiBinding是這樣的...

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0}, {1}"> 
      <Binding Path="LastName" /> 
      <Binding Path="FirstName" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock>