这是我的第一个问题,不仅仅是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_NAME
或LAST_NAME
中的任何内容发生了更改,则{{1}}已更改通知属性的任何工作。
我看到了类似的问题here。
感谢任何人都可以提供帮助。
答案 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框架,例如Prism或ReactiveUI
作为旁注,我认为FamilyName和GivenName比FirstName和LastName更好,考虑到像韩国这样的国家名是第一名的国家。