【问题标题】:Bind CLR object to WPF control using Microsoft Expression Blend使用 Microsoft Expression Blend 将 CLR 对象绑定到 WPF 控件
【发布时间】:2010-07-11 22:50:34
【问题描述】:

我有以下类人:

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 是一个类,它提供了从数据库中获取数据并构造人员对象的方法。

现在,PersonEditorForm.xaml 有一个名为 NicknameTextBox 的文本框。我想使用 Microsoft Expression Blend 将该人的昵称绑定到其 Text 属性。我怎么做?

这是我迄今为止尝试过的(没有成功):

  1. 我为 LayoutRoot 创建了新的对象数据源,它指向我的引擎类,即 PersonEditorFormController。
  2. 我为 NicknameTextBox 的 Text 属性创建了数据绑定 - 我从 Data Context 选项卡的 PersonEditorForm 中选择了 SelectedPerson.Nickname。
  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");
    }
    

请帮忙。谢谢。

【问题讨论】:

    标签: c# wpf data-binding expression-blend binding


    【解决方案1】:

    您需要在两个类上实现INotifyPropertyChanged,并在任何属性更改时引发PropertyChanged 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多