Как реализовать объект / свойство зависимости от пользовательского класса? - PullRequest
1 голос
/ 31 декабря 2011

Вот мой Персональный класс:

    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» он меняет фамилию в моем коде, но не отражает мое текстовое поле «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); }
    }

Что мне делать ?? Пожалуйста, совет ..

Ответы [ 2 ]

2 голосов
/ 31 декабря 2011

Попробуйте это:

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 .

1 голос
/ 31 декабря 2011

Проблема с вашим кодом заключается в том, что вы не вызываете событие 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")); 
            } 
        } 
    } 
} 
...