1

まず、この投稿を読みましたが、問題の答えが見つかりませんでした。

これが集約されたModelクラスなのか、集約されたViewModelクラスなのかはわかりませんが、これは私が持っているものです。

私のWPF(Prismを使用)アプリケーションには、サービスに接続し、フィルターに基づいて'Customer'オブジェクトのリストを要求するビュー'FilterCustomersView 'があります。

サービスから返されるリストは次のとおりです。

List<CustomerDTO>    FilteredCustomers;

そして、CustomerDTOは次のようになります。

public class CustomerDTO
{
    public    Guid                CustomerId;
    public    String              Name;
    public    String              Address;
    public    String              PhoneNumber;
    public    OrderInfoDTO        LastOrderInformation;
    public    List<OtherClass>    ListOfSomething;
}

そして、OrderInfoDTOは次のようになります。

public class OrderInfoDTO
{
    public    Guid          OrderId;
    public    DateTime      OrderDate;
    public    int           NumberOfProducts;
    public    double        TotalAmountSpent;
}

そして、OtherClassは次のようになります。

public class OtherClass
{
    public    Guid          Id;
    public    String        SomeText;
}

ご覧のとおり、顧客は「最終注文」を持っている場合と持っていない場合があります。

' CustomerDTO 'オブジェクトをViewModelでラップして、ビューにバインドできるようにします。

これは私がやろうと思ったことです:

public class CustomerViewModel : NotificationObject
{
    private CustomerDTO    _customerDTO;

    public CustomerViewModel(CustomerDTO   customerDTO)
    {
        _customerDTO = customerDTO;
    }

    public Guid CustomerId
    {
        get  {  return _customerDTO.CustomerId;  }
        set  {  _customerDTO.CustomerId = value; RaisePropertyChanged("CustomerId "); }
    }

    public String Name
    {
        get  {  return _customerDTO.Name;  }
        set  {  _customerDTO.Name = value; RaisePropertyChanged("Name"); }
    }

    public String Address
    {
        get  {  return _customerDTO.Address;  }
        set  {  _customerDTO.Address = value; RaisePropertyChanged("Address"); }
    }

    public String PhoneNumber
    {
        get  {  return _customerDTO.PhoneNumber;  }
        set  {  _customerDTO.PhoneNumber= value; RaisePropertyChanged("PhoneNumber"); }
    }
}

質問:

  1. まず第一に-「CustomerDTO」はモデルとして知られているものですか?また、「OrderInfoDTO」もモデルですか?そして「OtherClass」はどうですか?
  2. CustomerViewModelクラスの「OrderInfoDTO」をどのように処理しますか?そのための「ViewModel」も作成しますか?'OrderInfoDTO'ビューモデルはどこで作成しますか?誰かが顧客を更新し、「OrderInfoDTO」値を設定するとどうなりますか?
  3. CustomerViewModelクラスの「OtherClass」のリストをどのように処理しますか?そのためにObservableCollectionを作成しますか?誰かがその中のアイテムを削除したり、その中のアイテムを更新したり、それにアイテムを追加したりしたい場合はどうなりますか?
4

1 に答える 1

0

次のように考えてください。

  1. View は、View Model の要素を {Binding Path=, Mode=TwoWay を使用してバインドする UI です -- ユーザー入力に基づいて更新する場合
  2. モデルはデータのみです。これは、レコード セット、ファイル、データベース レコードなどです。つまり、CustomerDTO と OrderInfoDTO はモデルです。
  3. ビュー モデルは、データ (モデル) と UI (ビュー) の間のリンクです。データを変更できるため、UI に表示しやすくなります。

バックグラウンドで変更される可能性のあるリストがあるすべてのインスタンスで ObservableCollection を使用する必要があります。

そのデータを更新するビューが必要でない限り、OrderInfoDTO のビュー モデルは必要ありません。OrderInfoDTO を含む CustomerDTO 情報を提示する場合は、それを CustomerDTO ビュー モデルのプロパティにすることで問題ありません。

于 2013-04-24T20:00:08.303 に答える