1

私は付箋プロジェクトに取り組んでおり、WPF で UI を作成しており、アーキテクチャの設計上の選択肢として明らかに MVVM に頼っています。モデル、ビュー、およびビューモデルをどうするかについて考え直しています。

Note という名前のクラスが 1 つあります。次のようになります。

class Note
{
    public Guid ID { get; set; }
    public string Note { get; set; }
}

また、メモのコレクションを保存するユーザーもあります。

public class User
{
    public Guid ID { get; set; }
    public Dictionary<Guid, Note> Notes = new Dictionary<Guid,Note>();
}

それでは、Model と ViewModel を作成する必要があります。最初に、Note 自体がモデルであるという最も明白なアプローチを使用することを考えていました。次に、ViewModel に NoteViewModel を使用します。しかし、次に、User をモデルにして、ViewModel の UserViewModel クラスを作成するとどうなるかを考えました。その場合、INotifyPropertyChanged をどのように実装すればよいでしょうか。私のモデルがメモだった場合、INotifyPropertyChanged の実装は簡単です。これに関するあなたの考えは非常に高く評価されます。

4

2 に答える 2

0

モデルに対する考え方を広げる必要があると思います。簡単に言えば、モデルは、作業する「オブジェクト」の表現です(テーブルまたは POCO を定義したようなデータベースにすることができます)。クライアントテーブルとclientOrdersテーブルがデータベースのモデルの一部であるのと同じように、User と Note は両方ともモデルの一部である可能性があります。ViewModel は、モデルとやり取りするビジネス ロジックを処理し、wpf プロパティ バインディングを通じてそのデータをビューに公開します。

INotifyPropertCHanged に関しては、ここで簡単な使用方法 (vb) を示します。

Imports System.ComponentModel

Public Property CustomerName() As String 
        Get 
            Return Me.customerNameValue
        End Get 

        Set(ByVal value As String)
            If Not (value = customerNameValue) Then 
                Me.customerNameValue = value
                NotifyPropertyChanged()
            End If 
        End Set 
    End Property

c#:

 using System.ComponentModel

 public string CustomerName
        {
            get
            {
                return this.customerNameValue;
            }

            set
            {
                if (value != this.customerNameValue)
                {
                    this.customerNameValue = value;
                    NotifyPropertyChanged();
                }
            }
        }

お役に立てれば

于 2013-03-11T19:50:41.310 に答える
0

これを行う方法のより具体的な方法は、YouTube で入手できます。つまり、UserViewModel が親ビュー モデルになり、複数の NoteViewModel が子ビュー モデルになります。親ビュー モデルは、子ビュー モデルの作成を担当します。ビデオを楽しんで、著者が言うように - 幸せなコーディング!

http://www.youtube.com/watch?v=Dzv8CtUCchY

于 2013-03-11T21:41:39.490 に答える