0

AutoCompleteBox を含む UserControl を作成しようとしています。この AutoCompleteBox の SelectedItem プロパティを使用して、ユーザーが選択した項目に基づいた情報を他の UserControls に入力したいと考えています。ユーザーがドロップダウン内のアイテム間を「ナビゲート」するたびに SelectedItem が発生するのを防ぐために、次のように DropDownClosed イベントで実行される EventToCommand を作成しました。

コマンドのタイプは次のとおりです。 public RelayCommand SelectedItemCommand { get; プライベートセット; }

これは、ユーザーが最初に一致するものを入力し始めた場合を除いて正常に機能しますが、ユーザーが入力を続けて一致するものがなくなった場合、DropDown は閉じられ、実際には項目は選択されません。これにより、次のようなエラーが表示されます。

タイプ 'System.Windows.RoutedPropertyChangedEventArgs`1[System.Boolean]' のオブジェクトをタイプ 'MyProject.ViewModels.MyItem' にキャストできません

コマンドの Command メソッドで try-catch ステートメントを作成しようとしましたが、そのメソッドに入る前でも例外が発生するようです。

私の質問は次のとおりです。一致しない場合 (つまり、AutoCompleteBox に実際の SelectedItem がない場合)、コマンドが起動されないようにするにはどうすればよいですか?

4

1 に答える 1

0

PassEventArgsToCommand を使用していますか? その場合、RelayCommand は RelayCommand<EventArgs> である必要があり、CommandParameter は使用できません。これは、CommandParameter を 1 つしか持てない ICommand インターフェイスの制限です。面倒なことはわかっていますが、通常は別の方法を使用して必要なものを取得できます (たとえば、SelectedItem を VM のプロパティに TwoWay バインディングでバインドするなど)。

教えてローラン

于 2010-06-04T09:31:31.290 に答える