WPF中的自定义模型绑定

时间:2017-12-29 12:18:29

标签: c# wpf binding

这是我的第一个问题,不仅仅是stackoverflow,而是整个互联网。 我有一个wpf项目,其中包含从Sql server数据库自动生成的Entity Framework 6 EF6模型。 我有以下课程:

public partial class SA_EMPLOYEE
{
    public int EMPID { get; set; }
    public string FIRST_NAME { get; set; }
    public string LAST_NAME { get; set; }
}

//then I added a custom property
public partial class SA_EMPLOYEE
{
    public string FULL_NAME => $"{FIRST_NAME} {LAST_NAME}";
}

我有一个绑定到myDbContext.SA_EMPLOYEE.ToList()的列表框,显示FULL_NAME属性和一些控件绑定到所选项目。

当我在列表框中显示FIRST_NAME时,如果我在文本框中更改了FULL_NAME,则会立即更改FULL_NAME。如果FIRST_NAMELAST_NAME中的任何内容发生了更改,则{{1}}已更改通知属性的任何工作。

我看到了类似的问题here

感谢任何人都可以提供帮助。

2 个答案:

答案 0 :(得分:0)

您的解决方案是 INotifyPropertyChanged 界面。通过此link,您可以找到问题的确切解决方案。

答案 1 :(得分:0)

根据您的描述,我认为您可能应该使用MVVM pattern(如上所述)。 创建一个ViewModel并绑定到该模型而不是数据库模型。

public class EmployeeViewModel : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;

  public string FirstName {get;set;}
  public string LastName {get;set;}
  public string FullName => $"{FirstName} {LastName}";
}

如果您使用Fody/PropertyChanged,您将自动调用PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("FullName"));,否则您必须在FirstName和LastName属性的集合中手动调用OnPropertyChanged。以上面的链接为例。

然后将列表框绑定到员工的IObservableCollection。

您可能希望研究一下MVVM框架,例如PrismReactiveUI

作为旁注,我认为FamilyName和GivenName比FirstName和LastName更好,考虑到像韩国这样的国家名是第一名的国家。