我试图从我的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中使用哪一个数据绑定?
答案 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;
}
}