ListBox コントロールは Command プロパティを実装していません。SelectionChanged イベントにいくつかの機能を追加する必要があります。誰かがどうすればそれを行うことができるか知っていますか? 私を助けてください
5 に答える
SelectedItemへのバインディングを使用し、バインディング プロパティの設定で任意の機能を実装することを好みます。
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
...
public class ViewModel
{
public IEnumerable<Item> Items { get; set; }
private Item selectedItem;
public Item SelectedItem
{
get { return selectedItem; }
set
{
if (selectedItem == value)
return;
selectedItem = value;
// Do logic on selection change.
}
}
}
これは、MVVM アプリケーションで選択変更イベントに到達できる方法です。まず、コマンド プロパティはボタンでのみ機能することをお伝えします。現在、リスト ボックスやコンボ ボックスなどの選択変更イベントでそのプロパティを明示的にバインドする必要があります。 XMAL ファイル
<ListBox Name="MyListBox" ItemsSource="{Binding ListItems}" Height="150" Width="150" Margin="281,32,-31,118">
<Local:Interaction.Triggers>
<Local:EventTrigger EventName="SelectionChanged">
<Local:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=MyListBox,Path=SelectedItem}"/>
</Local:EventTrigger>
</Local:Interaction.Triggers>
</ListBox>
このためには、dll Syatem.Windows.Interactivity を追加する必要があります。今度は xaml ファイルの名前空間に参照を追加する必要があります。
xmlns:Local="clr-namespace:System.Windows.Interactivityassembly=System.Windows.Interactivity"
ViewModel クラスでは、Command in Con 構造を定義する必要があります
public ViewModel123()
{
MyCommand = new RelayCommand<string>(TestMethod);
}
選択変更イベントを処理できる TestMethod メソッドを作成する
private void TestMethod(string parameter)
{
MessageBox.Show(parameter);
}
これがあなたを助けることを願っています。
基本的に、いくつかのオプションがあります。
- ListBox のプロパティ SelectedItem を使用して、バックエンド (ビュー モデルなど) のプロパティにバインドし、Cameron MacFarlandで説明されているようにセッターでロジックを実行します。
- Pedro Lamasが投稿したリンクのように、一般的なイベントからコマンド動作を行うサード パーティのライブラリを使用します。
- サード パーティのライブラリを使用したくない場合、またはプロパティ セッター内にロジックを記述することが受け入れられない場合は、ListBox コントロールの独自の動作を作成できます。コントロールのイベントをサブスクライブし
SelectionChanged、コマンドを実行します (コマンドは、動作によって公開される依存関係プロパティである可能性があります)。
Laurent Bugnionからのこの投稿は、問題の解決に役立つと思います。
上記の投稿ではDataGridについて言及していますが、ListBoxでも機能すると思います。
よろしくお願いします。明けましておめでとうございます!:)
を使用することをお勧めしRelayCommandます。MVVM Light Toolkitを使用するか、 Josh Smith の実装のRelayCommandクラスとCommandManagerクラスを使用してください。私は個人的に 2 つのクラスだけを使用しているので、ツールキット全体は必要ありません。
これは間違いなく機能しますが、何をしているのかによっては、もっと簡単な方法があるかもしれません。オブジェクトを の にバインドし、その値が変化するSelectedValueのをリッスンする方が簡単かもしれません。ListBox