2012-03-29 14 views
1

MainWindowビューに接続されたMainWindowViewModelを持つMVVMアプリケーションがあります。
MainWindowビューには、株式ティッカーシンボルを含むComboBoxがあります。viewmodelからリストビュー項目をプログラムで選択するにはどうすればよいですか?

AllStockQuoteViewに接続されているAllStockQuoteViewModelという別のビューモデルとビューが、株価とその価格のリストを含むAllStockQuoteViewに接続されています。

ComboBoxから項目を選択し、AllStockQuoteViewの項目を選択して強調表示したいと考えています。私のMainWindowViewModel上で、AllStockQuoteViewModelへの参照を保存し、AllStockQuoteViewにバインドされたObservableCollection内の株式ティッカーシンボルを見つけるメソッドを呼び出すためにそれを使用しますが、プログラムでAllStockQuoteView上の項目を選択する方法が見つかりませんでした。

AllStockQuoteView上のListviewにバインドされたAllStockQuoteViewModelにSelectedQuoteプロパティがあり、アイテムの1つを選択でき、SelectedQuoteプロパティが正しく設定されています。これをプログラムでSelectQuoteメソッドで設定すると、アイテムがビューで選択されているかのように表示されませんが、アイテムはMainWindowViewModelに渡され、MainWindowビューのtextblocksに入力できます。

AllStockQuoteViewの項目を、ユーザーが選択したかのように強調表示されているように表示することができます。

どうすればいいですか?

答えて

0

まず、モデルとMVVMのアプローチについて考えなければなりません。良い出発点はhttp://blogs.msdn.com/b/kashiffl/archive/2010/11/14/mvvm-technical-description.aspxです。

さまざまな方法で機能を実装できたら、Observer Patternのようなものを実装するか、Notify Property-Changed-Eventsなどのメソッドを使用します。私は助けることができた

希望、

挨拶

+0

ありがとう、私はこれらの項目をチェックし、私のデザインを評価します。しかし、私はまだMVVMのビューモデルがどのようにプログラム内で項目を選択できるのかという基本的な疑問を持っています。 – JohnBlacker

+0

この質問をチェックアウトhttp://stackoverflow.com/questions/803216/managing-multiple-selections-with-mvvm-私はそれがあなたの問題を解決するのに役立つと思います。 –

3

そのあなたのビューモデル で二つのこと、あなたのオブジェクトのリストと、選択した項目のプロパティを必要とする

を実装するのは非常に簡単

 private CustomObject _selectedCustomObject; 

     public ObservableCollection<CustomObject> CustomObjects 
     { 
      get 
      { 
       return new ObservableCollection<CustomObject>(); 
      } 
     } 

     public CustomObject SelectedCustomObject 
     { 
      get { return _selectedCustomObject; } 
      set 
      { 
       if (_selectedCustomObject== value) 
       { 
        return; 
       } 

       _selectedCustomObject= value; 
       PropertyChanged.Raise(this, x => x.SelectedCustomObject); 
      } 
     } 

次に、List/Comboコントロールを追加し、両方のプロパティにバインドします。

<ListView ItemsSource="{Binding CustomObjects}" 
      SelectedItem="{Binding SelectedCustomObject}"> 

次に、viewmodelプロパティを設定するだけで、ビューが更新されます。

+0

上記のコードの問題は、CustomObjectsコレクションを取得するたびに、その前にあったものを破壊する新しいオブジェクトを作成することです...表示するものは何もありません。 – JohnBlacker

+0

ええ、これらの2つのプロパティあなたはどのようにフィットして見える。私は例のためにそれを使用しました。選択した項目と同じように私用変数を返すことができます。 (この例で修正した元のコードは、静的リストの代わりにデータストアからの更新リストのモデルからの要求でした)。あなたの元の質問は、主に選択した項目に関するものでした。私は、あなたが選択したアイテムプロパティに割り当てるものは、オブジェクトのリスト(参照一致)になければならないということに言及しませんでした。 –

関連する問題