3

私はWPFとMVVMを初めて使用し、「Jason Dolinger on Model-View-ViewModel」の記事と例から始めましたが、データバインディングに関していくつか質問があります。

1)彼のデモアプリケーションでは、ObservableCollectionアイテムのDependencyObjectをサブクラス化しています。INotifyPropertyChangedと比較した長所/短所は何ですか?

2)データグリッド/リストビューのモデルからビューを更新するための最良の方法は何ですか?彼の例では、Quoteオブジェクトが追加または更新されたときに、リスナーとして登録します。

_source.QuoteArrived += new Action<Quote>(_source_QuoteArrived);

ViewModelは、QuoteViewModelオブジェクトを作成してコレクションに追加するか、_quoteMapというディクショナリを使用して便利なQuoteViewModelオブジェクトに更新されたQuoteオブジェクトを設定することにより、ビューを更新します。

void _source_QuoteArrived(Quote quote)
{

    QuoteViewModel qvm;
    if (_quoteMap.TryGetValue(quote.Symbol, out qvm))
    {
        qvm.Quote = quote;
    }
    else
    {
        qvm = new QuoteViewModel();
        qvm.Quote = quote;

        this.Quotes.Add(qvm);

        _quoteMap.Add(quote.Symbol, qvm);
    }
}   

Quoteオブジェクトが更新されたときにモデルからビューを更新するためのより良い方法はありますか、それとも辞書を作成する必要がありますか?INotifyPropertyChangedまたはDependencyObjectをサブクラス化するQuoteがなくても、Quoteオブジェクトが更新されたときにリストビューをすぐに更新できれば非常に簡単です。

ありがとう

4

1 に答える 1

1

最初の質問については、このStackOverflowの質問を参照してください。一般的に人々は好むようです INotifyPropertyChanged

2番目の質問については、見積もりはいつでも到着する可能性があるため、到着した見積もりをコレクションに既にある見積もりにマッピングする方法が必要です。辞書を使用することは、これを行うための賢明な方法のようです。他にどのように提案しますか?

ListViewをすぐに更新するとよいとのことですが、ListViewは、新しいQuoteがどのオブジェクトに対応しているかをどのように認識しますか?ListViewは、を実装するコレクションを純粋に監視し、INotifyCollectionChangedの内部については何も知りません。QuoteQuote.Symbol

于 2012-04-23T08:10:04.740 に答える