4

シルバーライト MVVM。RadCombobox があり、選択ごとに別のデータグリッドに新しい行を追加しています。ViewModel クラスに必需品のコードを追加しましたが、この部分は機能しています。私が実行したいのは次のとおりです。

  1. ユーザーが繰り返し選択できるように、コントロールにフォーカスがある間、comboBox を開いたままにしておきます (IsDropDownOpen をメソッドにバインドし、SelectedItem プロパティを true に設定しますが、選択後に閉じます)。

  2. 選択した項目を選択解除して、重複選択を許可します。イベント SelectionChanged を追加し、MainPage.xaml.cs にコードを追加しましたが、ViewModel 内で解決策を探しています。

4

1 に答える 1

1

まあ言ってみれば、

  IsDropDownOpen = {Binding IsDropDownFromViewModel}

また、ゲッターがIsDropDownFromViewModelドロップダウンを開くためのすべての条件を包含していると仮定すると、常に正しいドロップダウン状態が返されます。

PropertyChangedあとは、ドロップダウンが開いているはずなのに閉じている、またはその逆の場合はいつでも、このプロパティのイベントを発生させるだけです。

残念ながら、正確なシナリオはわかりませんでしたが、これが事実であると仮定しましょう(問題が何であれ、同様のアプローチを使用して修正する必要があります)。

シナリオ例:

アイテムを選択するとドロップダウンが閉じます。開いたままにすることを意図しています

上記の場合、ユーザーが項目を選択すると、selectedItem の対応するバインディング プロパティのセッターが呼び出される必要があるため、通知コードを記述します。

  public SelectedItemType SelectedItemInViewModel {
    get{ 
     return _selectedItemVM; 
   },
   set{
     _selectedItemVM=value;
     NotifyPropertyChanged("IsDropDownFromViewModel");
   }
 }

これが何をするかというと、radComboBox のIsDropDownOpenプロパティに、RHS のバインド式を再評価して新しい値を取得するように指示します。

コメントを残していない場合は、アプローチの要点を理解してください。

于 2012-08-14T09:05:55.450 に答える