WPF和创建对象以及为什么没有设置某些属性? (MVVM,EF)

时间:2014-10-14 04:29:54

标签: c# wpf xaml mvvm

我不确定为什么我在XAML中定义的属性没有在ViewModel中公开?这是我当前的应用程序:使用带有Entity Framework 6.0的MVVM模式创建一个WPF 4.5项目。

当我尝试在Save()上创建一个新对象时,比如说Employee,我在EmployeeViewModel中实例化一个带有一些默认值的Employee对象,例如:

C#

public class EmployeeViewModel
{

    private Employee _employee;
    public Employee Employee
    {
        get
        {
            return _employee;
        }
        set
        {
            _employee = value;
            RaisePropertyChanged("Employee");
        }
    }

    public EmployeeViewModel()
    {
        Employee = new Employee();
        Employee.HireDate = DateTime.Now;
            ...
    }



} 

XAML:

...
<TextBox Text="{Binding Employee.FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Text="{Binding Employee.LastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Text="{Binding Employee.Salary, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
...

我从上面的XAML中知道Path,例如&#34; Employee.FirstName&#34;正在寻找那些属性,因为我没有得到警告,注意到它无法弄清楚Employee是什么。仅供参考,我为此XAML设置了DataContext,如下所示:

DataContext="{Binding Path=EmployeeViewModel, Source={StaticResource Locator}}">

虽然我没有明确设置ViewModel中的FirstName,LastName等员工属性,但它们是否仍然应该通过ViewModel中的Employee的公共属性进行设置?

我还在Employee类中定义的属性上设置了一些断点,这些属性位于我的Entity Framework Code First定义的位置,而且没有被命中。

因此,当我输入数据然后单击Save按钮调用EmployeeViewModel中的Save方法时,通过表格将Employee对象作为参数,我可以看到Employee对象没有任何属性设置假设来自XAML,我看到的唯一属性是我最初通过ViewModel的构造函数设置的属性。

我错过了什么?


编辑1:

这是我的Save方法,这是我调查Employee对象的地方,它具有与通过EmployeeViewModel构造函数实例化时相同的属性:

public void Save()
{
    AddEmployee(Employee);
}

我很确定它与构造函数中的Employee对象相同,因为它上面有TimeStamps。


编辑2:

我的Employee类是在一个基本上是EF Code First项目的项目中定义的。这是我班级的一部分:

 [Table("Employee")]
 public partial class Employee
 {
     public Employee()
     {
         Projects = new ICollection<Project>();
     }

     public int EmpId{ get; set; }

     [StringLength(50)]
     public string FirstName { get; set; }

     ...

1 个答案:

答案 0 :(得分:2)

在您的员工类中实现INotifyPropertyChanged :(绑定在您的Employee的属性上,在更新属性时不会收到通知)

    [Table("Employee")]
    public partial class Employee : INotifyPropertyChanged
    {
        public Employee()
        {
            Projects = new ICollection<Project>();
        }

        private int _empId;
        public int EmpId 
        {
            get
            {
                return _empId;
            }
            set
            {
                _empId = value;
                NotifyPropertyChanged("EmpId");
            }
        }

        private string _firstName;
        [StringLength(50)]
        public string FirstName
        {
            get
            {
                return _firstName;
            }
            set
            {
                _firstName = value;
                NotifyPropertyChanged("FirstName");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

<强>更新

尝试阅读本文,它可能具有在WPF中绑定数据库对象的本机方式。 here

相关问题