我是第一次制作视图模型,经过一些研究后我得到了以下代码:
Type or namespace couldn't be found
我收到以下错误:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HotelWPF
{
public class Reservation
{
private string SecretaryName;
private int RoomNumber;
private string ReservationType;
private DateTime ReservationDate;
public string SecretaryName1
{
get
{
return SecretaryName;
}
set
{
SecretaryName = value;
}
}
public int RoomNumber1
{
get
{
return RoomNumber;
}
set
{
RoomNumber = value;
}
}
public string ReservationType1
{
get
{
return ReservationType;
}
set
{
ReservationType = value;
}
}
public DateTime ReservationDate1
{
get
{
return ReservationDate;
}
set
{
ReservationDate = value;
}
}
}
}
CallerMemberName也给了我一个错误:
createdDateTimeStamp
很难将视图模型作为一年级学生,帮助将不胜感激
编辑: 这是我的模型类之一:
Date
答案 0 :(得分:3)
您实际上没有实施INotifyPropertyChanged
;你刚刚在类声明中承诺了编译器,这里:
ReservationVM : INotifyPropertyChanged
现在它正在帮助你实现这一承诺。要实现该特定接口,您只需在viewmodel类PropertyChanged
中实现ReservationVM
事件。这很容易,只需添加定义它的这一行:
public event PropertyChangedEventHandler PropertyChanged;
Visual Studio也将为您实现接口。右键单击顶级类声明中的接口名称,然后从上下文菜单中选择“实现接口”(取决于VS版本,可能在“快速操作和重构”下)。你不想实现“明确”,只需要定期“实现”。
一旦那样,那么你需要CallerMemberNameAttribute
的命名空间。这也很快:
添加以下行:
using System.Runtime.CompilerServices;
...到文件的顶部。
我想提出的另一点是你的财产的命名。它不会破坏任何东西,但你提出的公共/私人命名惯例并不是一个好主意。这是更常见的惯例:
private string _secretaryName;
public string SecretaryName
{
get
{
return _secretaryName;
}
set
{
SetProperty(ref _secretaryName, value);
}
}
答案 1 :(得分:2)
PropertyChanged
是一个需要由INotifyPropertyChanged
定义的事件。 最简单获取它的方法是使用“实现界面”建议,将输入光标放在代码中INotifyPropertyChanged
并按Ctrl+.
您也可以将鼠标悬停在其上您的鼠标,然后单击出现的灯泡。
或者只是将以下行添加到视图模型中:
public event PropertyChangedEventHandler PropertyChanged;
您的其他错误是因为您尚未添加CallerMemberName
的命名空间。您可以使用与上面相同的方式从“使用”建议中获取它,或者将以下行添加到视图模型文件的顶部:
using System.Runtime.CompilerServices;