3

私はWPFとC#を使用しています。2 つのリストボックスに少し問題があります。ListBox1 の項目をダブルクリックすると、その項目が L​​istBox2 に追加され、ListBox1 でこの項目が削除されます。追加は機能していますが、削除は機能していません。エラーメッセージが表示されました(写真を見てください)。理由はありますか?何が間違っている可能性がありますか?

class Shopping
{

    private ObservableCollection<string> _fruits;

    public IEnumerable<string> GetFruits()
    {
        _fruits = new ObservableCollection<string> 
                            {
                                "Apples",
                                "Bananas",
                                "Oranges",
                                "Grapes",
                                "Coconut"
                            };

        return _fruits;
    } 

 public GroceriesList()
    {
        InitializeComponent();

        ListBox1.ItemsSource = _shopping.GetFruits();

    }

    private void ListBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (ListBox1.SelectedItem != null)
        {
            ListBox2.Items.Add(ListBox1.SelectedItem);
            ListBox1.Items.Remove(ListBox1.SelectedItem);
        }

    }

ここに画像の説明を入力

4

1 に答える 1

2

基になる CollectionViewSource があるため、変数 _fruits を部分的に追加/削除するように指示しています。最初の lb をリスト _allFruits にバインドし、2 番目の lb をリスト _selectedFruits にバインドします。lb ソースに直接ではなく、これらのリストに対して適切な追加/削除を実行します。

これは次のように機能します(質問からカットアンドペーストしたため、コンパイルエラーが発生する可能性があります)...

    private ObservableCollection<string> _fruits;
    private ObservableCollection<string> _fruitsSelected;

    public IEnumerable<string> GetFruits()
    {
        _fruits = new ObservableCollection<string> 
                            {
                                "Apples",
                                "Bananas",
                                "Oranges",
                                "Grapes",
                                "Coconut"
                            };

        return _fruits;
    } 
public GroceriesList()
    {
        InitializeComponent();
        _fruitsSelected = new ObservableCollection<string>();
        ListBox1.ItemsSource = _shopping.GetFruits();
        ListBox2.ItemsSource = _fruitsSelected;

    }

  private void ListBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (ListBox1.SelectedItem != null)
        {
            _fruitsSelected.Add(ListBox1.SelectedItem);
            _fruits.Remove(ListBox1.SelectedItem);
        }
    }

これにより、エラーの発生が停止し、バインディングが「wpf」の方法で動作できるようになります。もう 1 つの違いは、1 つではなく 2 つのリストを使用していることです。

于 2013-06-03T08:39:04.550 に答える