2

ソース プロパティが更新される 1 つまたは複数の項目をユーザーが選択したときに必要です。バインド モード OneWayToSource を試してみましたが、これは役に立ちません。以下は、XAML と ViewModel のコードです。

<ListBox  x:Name="ItemsListBox" SelectionMode="Multiple" Height="300" 
          ItemsSource="{Binding ResultSet}"
          SelectedItem="{Binding SelectedItems,Mode=OneWayToSource}">

private List<string> _selectedItems;
public List<string> SelectedItems
{
    get
    {
        return _selectedItems;
    }
    set
    {
        _selectedModeItems = value;
        NotifyPropertyChanged("SelectedItems");
    }
}

アタッチされた動作を使用してアプローチしましたが、それは機能しますが、もっと簡単な方法はありますか?

4

3 に答える 3

1

あなたの質問は次のようになります。

MVVMを使用してWPFのListBoxから複数の選択項目を取得するには?

まあ、次のスタックオーバーフロースレッドから答えがあります。

リンク 1

リンク 2

IsSelectedResultSet ビュー モデルでプロパティを定義するだけです。次に、選択したアイテムをいつでも取得したい場合は、ResultSet から「IsSelected」プロパティが true に設定されているアイテムを取得します。

于 2013-03-07T12:07:52.727 に答える
1

接続された動作を作成することもできます。これ
は、その方法の例です。

于 2013-03-13T09:04:37.160 に答える
0

WPF ListBox には、現在選択されている項目に関連する 2 つのプロパティがあります。

  • バインディングに使用できるSelectedItemで、最初に選択されたアイテムにバインドされます。
  • SelectedItems (最後に 's' があるもの) はバインディングに使用できません。

複数選択が有効になっている場合、SelectedItems にアクセスしたいのですが、残念ながらバインドできません。

コード ビハインドを使用して、この制限を回避できます。選択を含む SelectedItems という名前のプロパティを作成し、SelectionChanged イベントをサブスクライブします。

<ListBox  x:Name="ItemsListBox" SelectionMode="Multiple" Height="300" 
                          ItemsSource="{Binding ResultSet}" 
        SelectionChanged="ListBox_SelectionChanged">


private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    foreach (string item in e.RemovedItems)
    {
        SelectedItems.Remove(item);
    }

    foreach (string item in e.AddedItems)
    {
        SelectedItems.Add(item);
    }
}
于 2013-03-07T10:38:24.057 に答える