Привязать объект 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. Как я могу это сделать?
Вот что я попробовал до сих пор (без успеха):
- Я создал новый источник данных объекта для LayoutRoot, который указывает на мой класс движка, т.е. PersonEditorFormController.
- Я создал привязку данных для свойства Text в NicknameTextBox - я выбрал SelectedPerson.Nickname из PersonEditorForm на вкладке "Контекст данных".
Я создал следующее загруженное событие окна, чтобы заполнить свойство 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
событие, когда любое свойство изменяется.