2017-01-11 27 views
0

我想提出一個視圖模型首次,一些研究之後,我得到了下面的代碼:製作一個視圖模型誤差

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

回答

3

你實際上並沒有實現INotifyPropertyChanged;你剛纔答應你會在類的聲明,這裏的編譯器:

ReservationVM : INotifyPropertyChanged 

,現在是抱着你的諾言。要實現該特定接口,您只需在視圖模型類ReservationVM中實現PropertyChanged事件。這很簡單,只要加入這行定義它:

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); 
     } 
    } 
+0

to viewmodel or model class? – Gigitex

+0

@Gigitex Viewmodel。說它正在實施INotifyPropertyChanged –

+0

仍然收到錯誤 – Gigitex

2

PropertyChanged是需要由INotifyPropertyChanged被定義的事件。 最簡單的獲得它的方法是將代碼中的輸入光標放在INotifyPropertyChanged上,然後按Ctrl+.將鼠標懸停在其上,然後單擊出現的燈泡。

或者只是添加下面一行到您的視圖模型:

public event PropertyChangedEventHandler PropertyChanged; 

你其他錯誤是因爲你沒有添加的命名空間CallerMemberName。你可以從上面的「使用」建議中得到它,或者將以下代碼行添加到視圖模型文件的頂部:

using System.Runtime.CompilerServices;