【问题标题】:listbox double-click to add and remove列表框双击添加和删除
【发布时间】:2013-06-03 08:06:13
【问题描述】:

我正在使用 WPF 和 C#。我对两个列表框有点麻烦。当我双击 ListBox1 的一个项目时,它会将该项目添加到 ListBox2,然后该项目应该从 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);
        }

    }

【问题讨论】:

  • 这看起来像 c# 和 WPF 是正确的吗?如果是,请将这些标签添加到您的问题中
  • 对不起,是 c# 和 wpf。我刚刚在我的帖子中添加了它。
  • 这将吸引合适的观众... :-)
  • @GarryVass 你能告诉我你的示例代码吗?不知道该怎么做。谢谢
  • @GarryVass 明白了。非常感谢:)

标签: c# wpf listboxitem


【解决方案1】:

他们告诉您从变量 _fruits 中添加/删除部分,因为有一个底层的 CollectionViewSource。我会将第一个 lb 绑定到列表 _allFruits,将第二个 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”方式运行。另一个区别是您使用的是两个列表而不是一个。

【讨论】:

  • @user1358072,很高兴为您提供帮助。请将答案标记为已接受,以免人们再次尝试解决它。​​
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2016-09-14
相关资源
最近更新 更多