-1

次のコードは私の問題を示しています。

public class Person : (INotifyPropertyChanged) // INPC only for PersonViewModelB
{
    public string Name {get; set;}
}

public class PersonViewModelA : INotifyPropertyChanged
{
    private Person _person {get; set;}

    public string Name 
    {
        get { return _person.Name; }
        set { _person.Name = value; }
    }

    //XAML: {Binding Name}
}

public class PersonViewModelB : INotifyPropertyChanged
{
    private Person Person {get; set;}

    //XAML: {Binding Person.Name}
}

多くの例で、PersonViewModelAのようなものを見てきました。メリットがわかりません。私にとって、PersonViewModelBははるかにクリーンで、はるかにドライです。

どちらの場合も、ViewModel(IsSelectedなど)または計算フィールド(Name = FirstName + "" + LastNameなど)にビュー固有のフィールドを追加できます。リヒトドメインモデルを使用している場合、それをビューに公開できないのはなぜですか?

Asp.net MVCでは、モデルに直接バインドすることを学びました。それは問題ありませんが、WPFではそうではありませんか?なんで?

追加のオーバーヘッドを正当化するものは何ですか?

4

2 に答える 2

0

Aのようなアプローチを見ると、基礎となるオブジェクトがサポートしていないINotifyPropertyChangedか、実際の実装に柔軟性が必要なためです。

それPersonが変わる可能性があることを確認してから、UIを再構築する必要があります。ただし、ロジックが別のDLLに存在し、ViewModelをプロキシにバインドするシナリオについて考えてみてください。その後、モデルが変更されたかどうかは関係ありません。UIを再コンパイルする必要はありません。

于 2012-09-16T15:21:27.213 に答える
0

MVVMは、ビューモデルを持たない(そして線よりも三角形である)MVCとは異なります。モデルに直接バインドしない理由の1つは、依存関係を最小限に抑えることです。そのため、モデルが変更された場合は、VMビューではなくVMを調整するだけで済みます。

于 2012-09-16T15:25:50.543 に答える