2011-12-30 79 views
1

這裏是我的Person類:如何在自定義類上實現依賴對象/屬性?

public class Person 
{ 
    private string _lastName; 

    public string LastName 
    { 
     get { return _lastName; } 
     set { _lastName = value; } 

    } 
}//close class 

這是我的XAML:

 <StackPanel> 
     <TextBox x:Name="txtLastName" 
       Height="50" Width="300" 
       DataContext="{Binding ElementName=_this, Path=PersonObject}" 
       Text="{Binding Path=LastName}" /> 

     <Button Height="50" Width="100" x:Name="btnChangeValue" Content="Change Value" Click="btnChangeValue_Click"/> 
    </StackPanel> 

這裏是我的XAML.CS

public partial class ClassDependency : Window 
{ 
    public Person objPerson = new Person(); 
    public ClassDependency() 
    { 
     objPerson.LastName = "testing..."; 
     InitializeComponent(); 

    } 

    public Person PersonObject 
    { 
     get { return objPerson; } 
     set { objPerson = value; } 
    } 

    private void btnChangeValue_Click(object sender, RoutedEventArgs e) 
    { 
     objPerson.LastName = "New value after click...."; 
    } 
}//close class 

我的問題是:點擊 「btnChangeValue」 它之後在我的代碼後面更改Last Name,但它不反映我的文本框「txtLastName」。我怎樣才能解決這個問題???我應該在我的xaml.cs文件中實現依賴屬性?我也試過,但沒用。

public static readonly DependencyProperty PersonObjectProperty = DependencyProperty.Register("PersonObject", typeof(object), typeof(ClassDependency)); 
    public Person PersonObject 
    { 
     get { return (Person)GetValue(PersonObjectProperty); } 
     set { SetValue(PersonObjectProperty, value); } 
    } 

我該怎麼辦?請指點..

+0

進一步說明:您將在我的TextBox綁定中看到_this。 _這是我當前的窗口名稱。當我跑我的窗戶。我在我的文本框中看到「測試」,但點擊按鈕時它不會改變值。 – usergaro 2011-12-30 21:44:14

回答

2

試試這個:

public class Person : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private string _lastName; 

    public string LastName 
    { 
     get { return _lastName; } 
     set 
     { 
      _lastName = value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("LastName")); 
      } 
     } 
    } 
} 

這樣,框架得到通知的屬性發生變化時。請參閱INotifyPropertyChanged Interface

+0

我還需要在我的Xaml.cs文件中實現DependencyProperty嗎?或者只按照你告訴我的方式修改我的班級應該工作? – usergaro 2011-12-30 21:59:13

+0

這種修改應該足夠了。您不需要依賴項屬性。 – alf 2011-12-30 22:00:18

+0

當我輸入「if(PropertyChanged!= null)」visual studio無法記錄PropertyChanged字?我可以看到PropertyChangeCallBack,PropertyChangedEventArgs,PropertyChangedEventHandler和其他很多,但無法在我的intellisense下拉列表中看到「PropertyChanged」。 THanks – usergaro 2011-12-30 22:01:25

1

與您的代碼的問題是,你是不是引發PropertyChanged事件,所以用戶界面是不知道的值更改的,對你的依賴的setter屬性提高PropertyChanged事件,如下圖所示:

public class Person : INotifyPropertyChanged 
{ 
    private string _lastName; 

    public string LastName 
    { 
     get { return _lastName; } 
     set 
     { 
      _lastName = value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("LastName")); 
      } 
     } 
    } 
} 
+0

我還需要在我的Xaml.cs文件中實現DependencyProperty嗎?或者只按照你告訴我的方式修改我的班級應該工作? – usergaro 2011-12-30 21:58:55

+0

您只需要更新您的類,不需要對xaml.cs文件進行更改。只要這些值與您的對象綁定,就不需要其他任何東西。 – 2011-12-30 22:02:19

+0

感謝您的快速響應。當我輸入「if(PropertyChanged!= null)」visual studio無法記錄PropertyChanged字?我可以看到PropertyChangeCallBack,PropertyChangedEventArgs,PropertyChangedEventHandler和其他很多,但無法在我的intellisense下拉列表中看到「PropertyChanged」。 THanks – usergaro 2011-12-30 22:04:03

相關問題