发出viewmodel错误

时间:2017-01-11 19:55:43

标签: c# wpf visual-studio mvvm viewmodel

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

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

2 个答案:

答案 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;