2

これについての助けは素晴らしいでしょう。

私はモデルを持っています

public class Master
{
   ...
   public Detail[] Details {get; set;}
}

Master オブジェクトのコレクションを返す WCF サービスからビュー モデルを設定しています。ビュー モデルで簡単に使用できるように、observablecollection を返すようにサービス参照を構成しました。

私のビューモデルは、

public ObservableCollection<Master> Masters {get; set;}
public Master SelectedMaster {get; set;}

私の見解では、2 つのリストボックスがあります。1 つは Masters プロパティにバインドされ、もう 1 つは SelectedMaster.Details にバインドされています。

SelectedMaster に新しい詳細を追加しようとするときを除いて、これはすべて正常に機能します。

SelectedMaster の Details のコレクションは単なる Details のリスト (ObservableCollection ではない) であり、その理由は明らかです。

ここにはどのようなオプションがありますか? INotifyPropertyChanged を実装しようとしましたが、うまくいかないようです。Details 用に別の ObservableCollection を作成することもできますが、それは、SelectedMaster が変更されたときにこのコレクションを同期させておく必要があることを意味します (SelectedMaster プロパティは、最初のリストボックスの SelectedItem にバインドされます。

これがうまくいくことを願っています。フィードバックをお待ちしております。マスターのコレクションと同様に、WCF が詳細のコレクションを observablecollection として返すことができれば理想的ですが、そのようには機能しないようです。

ありがとう。

4

2 に答える 2

2

ネストされたコレクションを単純な配列以外のタイプとして返​​すように構成できるかどうかを判断するのに十分なWCFはわかりませんが、WPFの観点から説明します。

ここには魔法はありません。単純な配列はいかなる種類の変更通知も実装していません。単に、などのビュー対応コレクションでラップする必要がありますObservableCollection

すべてをまとめて、ラップされたコレクションとのみ対話します。例:

public class MasterWrapper
{
...
    public MasterWrapper(Master master)
    {
        this.Details = new ObservableCollection<Detail>();
        this.Master = master;
        foreach (var detail in Master.Details)
            this.Details.Add(detail);
    }
...

    public static ObservableCollection<MasterWrapper> GetMasters()
    {
        ObservableCollection<MasterWrapper> results = 
            new ObservableCollection<MasterWrapper>();
        List<Master> modelMasters = null; // Populate this from the service.
        foreach (var m in modelMasters)
            results.Add(new MasterWrapper(m));
        return results;
    }
于 2010-01-07T19:14:52.363 に答える
1

問題は、Detailsプロパティが単なるDetailオブジェクトの配列であるため、変更がビューに通知されないことです...

私はそれを作成し、のコンストラクターにObservableCollection<Detail>コレクションをロードしMasterます...

public Master(Detail[] details)
{
    Details = new ObservableCollection<Detail>(details);
}

コンストラクターのパラメーターとしてまたはをObservableCollection<T>取ることを忘れないでください。IEnumerable<T>List<T>

于 2010-01-07T19:16:18.790 に答える