Привязать объект CLR к элементу управления WPF с помощью Microsoft Expression Blend

У меня есть следующий класс Person:

public class Person
{
     public string Name
     {
          get { return name; }
          set { name = value; }
     }

     public string Nickname
     {
          get { return nickname; }
          set { nickname = value; }
     }

     private string nickname;
     private string name; 

     public Person(DataRow row)
     {
          this.name = Convert.ToString(row["Name"]);
          this.nickname = Convert.ToString(row["Nickname"]);
     }
}

и другой класс PersonEditorFormController в другой сборке, который действует как движок для класса WPF PersonEditorForm.xaml:

public class PersonEditorFormController
{
    public Person SelectedPerson
    {
        get { return person; }
        set { person = value; }
    }

    private Person person;

    public void GetPerson(string name)
    {
        try
        {
            Common.dbController.OpenConnection();
            Common.dbController.BeginTransaction();

            PersonController personController= new PersonController();
            string[] fields = new string[] { "Name" };
            string[] values = new string[] { name };
            this.person = personController.GetPerson(fields, values);

            Common.dbController.CommitTransaction();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            Common.dbController.CloseConnection();
        }
    }
}

PersonController - это класс, который предоставляет средства для получения данных из базы данных и для создания объекта person.

Теперь PersonEditorForm.xaml имеет одно текстовое поле с именем NicknameTextBox. Я хочу связать псевдоним человека с его свойством Text, используя Microsoft Expression Blend. Как я могу это сделать?

Вот что я попробовал до сих пор (без успеха):

  1. Я создал новый источник данных объекта для LayoutRoot, который указывает на мой класс движка, т.е. PersonEditorFormController.
  2. Я создал привязку данных для свойства Text в NicknameTextBox - я выбрал SelectedPerson.Nickname из PersonEditorForm на вкладке "Контекст данных".
  3. Я создал следующее загруженное событие окна, чтобы заполнить свойство SelectedPerson:

    private void Window_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
         PersonEditorFormController controller = 
             this.LayoutRoot.GetValue(Grid.DataContextProperty) as PersonEditorFormController;
         controller.GetPerson("Some_name");
    }
    

Пожалуйста помоги. Благодарю.

1 ответ

Решение

Вам необходимо реализовать INotifyPropertyChanged на обоих ваших классах и поднять PropertyChanged событие, когда любое свойство изменяется.

Другие вопросы по тегам