c# - 在 ViewModel 类 C# 中实例化模型类的麻烦
问题描述
我正在尝试在我的 viewmodel 类中从我的 MVVM 测试项目中实例化我的模型类的一个对象。
人物模型类:
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’”。
如何创建对象然后访问其属性以设置值?然后我可以将哪个用于我的视图中的数据绑定?
解决方案
该语句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".
对于视图模型,传递一个 Person 可能是有意义的。
public class PersonViewModel
{
private readonly Person _person;
public string FirstName => _person.FirstName;
public PersonViewModel(Person person) // constructor
{
_person = person;
}
}
推荐阅读
- extjs - 如何加载树存储表单ajax响应
- javascript - Tampermonkey - 带有自动填充验证的表单下拉选择
- javascript - 通过按钮单击更改文本字段的值 html javascrift
- node.js - 错误,通过 nodemailer 发送邮件时
- c# - 根据当前页面添加类
- linux-kernel - 为什么较新的 glibc 使用 vfork 而不是 fork 实现 posix_spawn?
- javascript - Materialize - Autocomplete does not show options instantly
- elasticsearch - GeoPolygon 的距离
- python - 在 BigQuery 中使用不同服务帐号连接不同项目中的表
- oracle - 捕获并停止 DDL 活动