出现视图模型错误



我第一次制作视图模型,经过一些研究,我得到了以下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HotelWPF
{
public class ReservationVM : INotifyPropertyChanged
{
public Reservation reservation = new Reservation();
private string SecretaryName;
private int RoomNumber;
private string ReservationType;
private DateTime ReservationDate;
public string SecretaryName1
{
get
{
return SecretaryName;
}
set
{
SetProperty(ref SecretaryName, value);
}
}
public int RoomNumber1
{
get
{
return RoomNumber;
}
set
{
SetProperty(ref RoomNumber, value);
}
}
public string ReservationType1
{
get
{
return ReservationType;
}
set
{
SetProperty(ref ReservationType, value);
}
}
public DateTime ReservationDate1
{
get
{
return ReservationDate;
}
set
{
SetProperty(ref ReservationDate, value);
}
}
public void SetProperty<T>(ref T store, T value, [CallerMemberName] string name = null)
{
store = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedArgs(name));
}
}
}

我得到以下错误:

PropertyChanged doesn't exist in current context.

CallerMemberName也给了我一个错误:

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;
}
}
}
}

您实际上并没有实现INotifyPropertyChanged;你刚刚向编译器承诺,你会在类声明中,在这里:

ReservationVM : INotifyPropertyChanged

现在它让你信守承诺。要实现那个特定的接口,只需要在视图模型类ReservationVM中实现PropertyChanged事件。这很容易,只需添加定义它的行:

public event PropertyChangedEventHandler PropertyChanged;

Visual Studio也将为您实现接口。右键单击顶部类声明中的接口名称,然后从上下文菜单中选择"Implement interface"(取决于VS版本,可能位于"Quick Actions and Refractings"下)。您不希望实现"显式",只希望实现常规的"implement"。

一旦有了它,就需要CallerMemberNameAttribute的名称空间。这也很快:

添加此行:

using System.Runtime.CompilerServices;

到文件顶部。

我想说的另一点是关于你的房产的命名。这不会破坏任何东西,但你提出的公共/私人命名约定不是一个好主意。这是更常见的惯例:

private string _secretaryName;
public string SecretaryName
{
get
{
return _secretaryName;
}
set
{
SetProperty(ref _secretaryName, value);
}
}

PropertyChanged是一个需要由INotifyPropertyChanged定义的事件。最简单的方法是使用"实现界面"建议,将输入光标放在代码中的INotifyPropertyChanged上,然后按Ctrl+.。您也可以用鼠标悬停在它上面,然后单击出现的灯泡。

或者只需在视图模型中添加以下行:

public event PropertyChangedEventHandler PropertyChanged;

您的另一个错误是因为您没有添加CallerMemberName的命名空间。您可以通过与上面相同的方式从"使用"建议中获得它,或者在视图模型文件的顶部添加以下行:

using System.Runtime.CompilerServices;

相关内容

  • 没有找到相关文章

最新更新