2017-01-11 6 views
0

学校の授業では、ホテルの予約システムを作る必要があります。 私はUIなしでコードを作成しなければならないということです(前にこれをしたことはありません)。 後でUIを追加する必要があります。各UIは自分のコードで使用できるはずです。C#WPFの使い方は?

今私はSecretary Secretaryと呼ばれるクラスがReservationをすることができる持っています。 私はクラスSecretaryでこのメソッドを持っている:

public void CheckIn() 
     { 
      Reservation reservation = new Reservation(); 
      reservation.ReservationDate1 = //info from a textbox 
     } 

は今、私は私のUIの準備ができたとき、私はすべてを接続する必要があることを知っているが、彼はテキストボックスから情報を取得する必要があることを私のコードを伝えるための最良の方法は何ですかテキストボックスがまだ存在しないとき???

+0

使用MVVMパターンのために行われます。ビューモデルが必要です。アイテムをビューモデルのプロパティから取得し、ビューモデルのプロパティに設定します。後でUIをそのビューモデルにバインドします。 –

+0

あなたは学校でやったことのないことをどのようにして割り当てられますか?私はMVVMを見始めることをお勧めします。幸運にも、もう一週間、私の良き仲間ピートは、CodeProjectで一連の記事を始めました。彼はWPFなしですべてをあなたに連れて行きます。 http://web4.codeproject.com/Articles/1163180/Bare-Metal-MVVM-Where-The-Code-Meets-The-Road-Part – Andez

+0

@Gigitexテキストボックスは文字列にバインドする必要があります。この文字列は、INotifyPropertyChangedを実装するプロパティである必要があります。どのように動作するかを見るためにUIを試してみることをお勧めします。 – 0x4f3759df

答えて

0

あなたはViewModelでMVVMを使用することができますが、あなたはちょうどあなたがUIを設計する際の入力を受け入れる方法が準備したい場合、あなたはそれがCheckin(string value)ですのでCheckin()は、文字列パラメータを取る作り、ReservationDate1に値を割り当てることができます。

 public void CheckIn(string val) 
     { 
      Reservation reservation = new Reservation(); 
      reservation.ReservationDate1 = val; 
     } 

これは、あなたのロジックとあなたのUIを素敵に分離しておくための練習です。もう少し密結合、なんとか、このようになります:

 public void CheckIn(TextBox tb) 
     { 
      Reservation reservation = new Reservation(); 
      reservation.ReservationDate1 = tb.Text; 
     } 
+0

これはmvvmではありません – 0x4f3759df

+0

私は知っています。それが私がORと言った理由です。私はそれが誤解されることがある方法を見ます、私は投稿を編集します。 – CDove

3

私はあなたが、その後 最初に、あなたのデータをモデル化する必要がありますが何をすべきかについては、今this

を読むことから始めて示唆しています

public class Reservation 
{ 
    public DateTime Date{get;set;} 
    public string Name{get;set;} 

    public void Save(){/*Copy entry to DB, webservice, file, etc*/} 
    public void Delete(){/*delete entry from DB, webservice, file, etc*/} 
    //ect 

} 

あなたが今、あなたのデータを保持されます予約のために必要なもののリスト、および機能性を持って見ることができるように

は、次のあなたは、システムのデータと振る舞いを定義してきたように、あなたが私はあなたのコードを実行し、それが動作確認するためにテストプロジェクトを追加することを示唆しているものの、停止することができ、この時点でのViewModel

public class ReservationViewModel:INotifyPropertyCHanged 
{ 
    public Reservation Reservation{get;set;} //Link to model 
    private DateTime _Date; 

    public DateTime Date 
    { 
     get { return _Date; } 
     set { SetProperty(ref _Date, value); } 
    } 
    private string _Name; 

    public string Name 
    { 
     get { return _Name; } 
     set { SetProperty(ref _Name, value); } 
    } 
    public void SetProperty<T>(ref T store, T value,[CallerMemberName] string name = null) 
    { 
     store = value; 
     if(PropertyChanged!=null)PropertyChanged(this,new PropertyChangedArgs(name); 
    } 
    public void Save(){/*validate, copy over model values call models save*/} 
    public void Cancel(){/*change VM values back to Model values*/} 
    public void Delete(){/*validate, call models delete*/} 
    //ect 
} 

が必要

あなたのビュー を取得するとき

あなたは自分のViewModelに結合するであろうし、残りは、フロントエンドとバックエンドのロジックを分離するために、あなた

<TextBox Text={Binding Name}/> 
+0

各クラスのビューモデルを作成する必要がありますか? – Gigitex

+0

また、それは公共予約予約を認識しません{get; set;} //モデルにリンク – Gigitex

+0

これを取得する:http://prnt.sc/dued22 – Gigitex

関連する問題