5

ListBox コントロールは Command プロパティを実装していません。SelectionChanged イベントにいくつかの機能を追加する必要があります。誰かがどうすればそれを行うことができるか知っていますか? 私を助けてください

4

5 に答える 5

19

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.
        }
    }
}
于 2012-01-01T15:53:37.063 に答える
15

これは、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);
    }

これがあなたを助けることを願っています。

于 2012-05-25T12:59:54.743 に答える
2

基本的に、いくつかのオプションがあります。

  1. ListBox のプロパティ SelectedItem を使用して、バックエンド (ビュー モデルなど) のプロパティにバインドし、Cameron MacFarlandで説明されているようにセッターでロジックを実行します。
  2. Pedro Lamasが投稿したリンクのように、一般的なイベントからコマンド動作を行うサード パーティのライブラリを使用します。
  3. サード パーティのライブラリを使用したくない場合、またはプロパティ セッター内にロジックを記述することが受け入れられない場合は、ListBox コントロールの独自の動作を作成できます。コントロールのイベントをサブスクライブしSelectionChanged、コマンドを実行します (コマンドは、動作によって公開される依存関係プロパティである可能性があります)。
于 2012-01-01T21:08:20.807 に答える
1

Laurent Bugnionからのこの投稿は、問題の解決に役立つと思います。

http://geekswithblogs.net/lbugnion/archive/2010/05/19/handling-datagrid.selecteditems-in-an-mvvm-friendly-manner.aspx

上記の投稿ではDataGridについて言及していますが、ListBoxでも機能すると思います。

よろしくお願いします。明けましておめでとうございます!:)

于 2012-01-01T12:56:39.793 に答える
0

を使用することをお勧めしRelayCommandます。MVVM Light Toolkitを使用するか、 Josh Smith の実装のRelayCommandクラスとCommandManagerクラスを使用してください。私は個人的に 2 つのクラスだけを使用しているので、ツールキット全体は必要ありません。

これは間違いなく機能しますが、何をしているのかによっては、もっと簡単な方法があるかもしれません。オブジェクトを の にバインドし、その値が変化するSelectedValueのをリッスンする方が簡単かもしれません。ListBox

于 2012-01-01T15:34:36.507 に答える