麻烦在ViewModel类C#中实例化模型类

时间:2019-07-23 15:25:52

标签: c# wpf visual-studio mvvm

我试图从我的MVVM测试项目的viewmodel类中实例化我的模型类的对象。

人员模型类别:

using System.ComponentModel;

namespace WPFAppTest.Models
{
    public class Person : INotifyPropertyChanged
    {
        private string _FirstName;
        public string FirstName
        {
            get
            {
                return _FirstName;
            }
            set
            {
                _FirstName = value;
                RaisePropertyChange("FirstName");
                RaisePropertyChange("FullName");
            }
        }
        private string _LastName;
        public string LastName
        {
            get
            {
                return _LastName;
            }
            set
            {
                _LastName = value;
                RaisePropertyChange("LastName");
                RaisePropertyChange("FullName");
            }
        }
        public string FullName
        {
            get
            {
                return _FirstName + " " + _LastName;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void RaisePropertyChange(string property)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
        }

    }
}

PersonViewModel类:

using WPFAppTest.Models;

namespace WPFAppTest.ViewModels
{
    public class PersonViewModel
    {
        public Person person = new Person();

        person.FirstName = "Iain";
    }
}

似乎我收到一条错误消息,说“名称'person.FirstName'在当前上下文中不存在”。

如何创建对象,然后访问其属性来设置值?然后可以在View中使用哪一个数据绑定?

1 个答案:

答案 0 :(得分:1)

语句person.FirstName = "Iain";必须在方法内部或构造函数中

public class PersonViewModel
{
    public Person person = new Person();

    public PersonViewModel() // constructor
    {
        person.FirstName = "Iain";
    }

    public void Test() // method
    {
        person.FirstName = "Pete";
    }
}

注意:使用new PersonViewModel()创建对象时会自动调用的构造函数与该类具有相同的名称,并且没有返回类型(没有void关键字)。

>

方法Test必须显式调用

var p = new PersonViewModel(); // calls constructor and assigns "Iain".
p.Test(); // Assigns "Pete"

构造函数可以具有诸如方法之类的参数。

public PersonViewModel(string personName) // constructor with parameter
{
    person.FirstName = personName;
}

调用new时必须将参数传递给该参数:

var p = new PersonViewModel("Sue"); // Creates a VM with a person named "Sue".

对于视图模型,应该改为传递一个人。

public class PersonViewModel
{
    private readonly Person _person;

    public string FirstName => _person.FirstName;

    public PersonViewModel(Person person) // constructor
    {
        _person = person;
    }
}
相关问题