2017-08-25 2 views
-1

私はこの質問がすでに答えられていると思います。これが当てはまる場合はすぐに削除します。私はWPFに慣れていません(そしてC#の新機能)。MVVMにできるだけ従うように努力していますが、モデルにINotifyPropertyChangedを実装しない方法を見つけるのは本当に苦労しています。MVVMを使用して、定義済みオブジェクトのコレクションにINotifyPropertyChangedを実装するにはどうすればよいですか?

マイモデルには、別のリファレンスから作成された定義済みオブジェクトのコレクションが含まれています。モデル内では、Taskが完了した時点で更新されるプロパティがあります。

CustomObject - API

public class CustomObject 
{ 
    private string _myTaskOutput; 

    public CustomObject() 
    { 
    _myTaskOutput = MyTaskMethod(); 
    } 

    //MyTaskMethod() 

    //Get & Setter for _myTaskOutput; 
} 

Utilの - API

public static class Util 
{ 
    public IEnumerable<CustomObject> GenerateObjects() 
    { 
     var customObjectCollection = SomeHelperMethod(); 
     return customObjectCollection; 
    } 
} 

モデル

public class CustomObjectCollectionModel 
    { 
    private IEnumerable<CustomObject> _customObjectCollection; 

    public CustomObjectCollectionModel() 
    { 
     _customObjectCollection = Util.GenerateObjects(); 
    } 

    //Get & Setter for IEnumerable<CustomObject> 
    } 

オブジェクト参照が、私はObservableCollectionを有する質問(これは正しいのですか?)の外にあると意図したとおりにCustomObject作品にINotifyPropertyChangedを実装するが、私は物事の正しい方法をこれを理解しないと考えているので、変更されません。

+0

"を実装し、CustomObjectでINotifyPropertyChangedを実装することは意図したとおりに動作しますが、これを行う正しい方法ではないことを理解しています。これは正しい方法ではないと言わせてくれるのは何ですか? – Steven

+1

@Steven MVVMに関してSOに関するほとんどの回答。私はそれがViewModelではなくViewから直接Modelにバインドされているためだと推測しています。 – Kitson88

+0

@Steven私は、最初の開発者の役割に着陸するために、私のポートフォリオのためにこのアプリケーションを作成しています。 – Kitson88

答えて

1

CustomObjectが何らかの種類のドメインまたはビジネスオブジェクトである場合、クライアントアプリケーションのビューモデルクラスにラップすることができます。したがって、ObservableCollection<CustomObject>にバインドする代わりに、ObservableCollection<CustomObjectWrapper>にバインドします。CustomObjectWrapperは、INotifyPropertyChangedインターフェイスを実装するクライアント固有のクラスです(実際にはUIに変更通知を提供する必要がある場合)。

CustomObjectのサービスAPIから受け取ったCustomObjectWrapperを実際に作成する必要があります。これはビューモデルクラスで行うことができますが、クライアントとビジネスオブジェクトを同時に汚染する必要はありません固有コード。ドメイン固有のビジネスオブジェクトに直接バインドすることはめったに役に立ちません。

+0

だから、明確にするために、各 'CustomObject'のプロパティを新しい' CustomObjectWrapper'インスタンスにマップし、次に 'CustomObjectWrapper'をホストするViewModelプロパティにバインドする必要がありますか? – Kitson88

+0

はい、基本的にCustomObjectを、ビューがバインドするすべてのプロパティのCustomObjectWrapperに置き換えます。 – mm8

+0

私はただ今テスト中です。 – Kitson88

関連する問題