2011-12-30 10 views
1

は私の個人クラスである:ここではカスタムクラスに依存オブジェクト/プロパティを実装する方法は?ここ

public class Person 
{ 
    private string _lastName; 

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

    } 
}//close class 

は私のXAMLです:それを "btnChangeValue" をクリックした後:ここで

 <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 

です私のコードで姓を変更していますが、それは私のテキストボックス "txtLastName"の反映ではありません。どうすればこの問題を解決できますか?私はxaml.csファイルにDependency Propertyを実装する必要がありますか?私はそれも試みたが使用しなかった。

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

答えて

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

+0

この変更で十分です。依存関係プロパティは必要ありません。 – alf

+0

"if(PropertyChanged!= null)"と入力すると、ビジュアルスタジオはPropertyChanged単語を再編集できません。私はPropertyChangeCallBack、PropertyChangedEventArgs、PropertyChangedEventHandlerと他の多くを見ることができますが、私のintellisenseドロップダウンでは単に "PropertyChanged"を見ることができません。 THanks – usergaro

1

あなたのコードの問題は、UIは、値の変更を認識しませんので、以下に示すように、プロパティは、PropertyChangedイベントを上げるあなたの依存関係のセッターに、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

+0

クラスを更新するだけでxaml.csファイルを変更する必要はありません。値がオブジェクトからバインドされている限り、他に何も必要ありません。 –

+0

迅速な対応をありがとう。 "if(PropertyChanged!= null)"と入力すると、ビジュアルスタジオはPropertyChanged単語を再編集できません。私はPropertyChangeCallBack、PropertyChangedEventArgs、PropertyChangedEventHandlerと他の多くを見ることができますが、私のintellisenseドロップダウンでは単に "PropertyChanged"を見ることができません。 THanks – usergaro

関連する問題