Wpf 如何将所选项目从AutoCompleteBox添加到ListBox或Datagrid?

Wpf 如何将所选项目从AutoCompleteBox添加到ListBox或Datagrid?,wpf,silverlight-4.0,wpf-controls,wpftoolkit,Wpf,Silverlight 4.0,Wpf Controls,Wpftoolkit,我正在尝试构建一个场景,在这个场景中,我可以从项目集合中选择任何项目,并能够通过单击“添加”按钮将此文本字符串添加到列表框或数据网格中。我还需要能够通过单击“删除”按钮从listbox或datagrid中删除该项。我开始做这件事,但很难让它成功。我想知道是什么问题。任何想法都将受到高度赞赏。谢谢大家! XAML: 代码隐藏: public partial class MainPage : UserControl { private IList<string> myDat

我正在尝试构建一个场景,在这个场景中,我可以从项目集合中选择任何项目,并能够通过单击“添加”按钮将此文本字符串添加到列表框或数据网格中。我还需要能够通过单击“删除”按钮从listbox或datagrid中删除该项。我开始做这件事,但很难让它成功。我想知道是什么问题。任何想法都将受到高度赞赏。谢谢大家!

XAML:


代码隐藏:

public partial class MainPage : UserControl
{
    private IList<string> myDataList = null;
    string currentItemText;
    public IList<string> Items
    {
        get;
        private set;
    }

    public MainPage()
    {
        InitializeComponent();

        Items = new List<string>();
        Items.Add("One");
        Items.Add("Two");
        Items.Add("Three");
        Items.Add("Four");

        DataContext = this;
    }

    private void AddButton_Click(object sender, RoutedEventArgs e)
    {
        if (MyAutoCompleteBox.SelectedItem != null)
        {

            foreach (var item in MyAutoCompleteBox.SelectedItem)
            {
                ListBox.Items.Add(item);
                myDataList.Remove(item);
            }
            ApplyDataBinding();
        }
    }

    private void RemoveButton_Click(object sender, RoutedEventArgs e)
    {
        if (ListBox.SelectedItems != null)
        {
            int count = ListBox.SelectedItems.Count - 1;
            for (int i = count; i >= 0; i--)
            {
                //myDataList.Add(ListBox.SelectedItems[i]);
                ListBox.Items.Remove(ListBox.SelectedItems[i]);
            }
            ApplyDataBinding();
        }
    }

    private void ApplyDataBinding()
    {
        MyAutoCompleteBox.ItemsSource = null;
        MyAutoCompleteBox.ItemsSource = myDataList;
    }

}
public部分类主页面:UserControl
{
私有IList myDataList=null;
字符串currentItemText;
公共物品
{
得到;
私人设置;
}
公共主页()
{
初始化组件();
项目=新列表();
项目。添加(“一”);
项目。添加(“两”);
项目。添加(“三”);
项目。添加(“四”);
DataContext=this;
}
私有void AddButton_单击(对象发送方,路由目标)
{
如果(MyAutoCompleteBox.SelectedItem!=null)
{
foreach(MyAutoCompleteBox.SelectedItem中的变量项)
{
ListBox.Items.Add(item);
myDataList.Remove(项目);
}
ApplyDataBinding();
}
}
私有无效删除按钮\单击(对象发送方,路由目标)
{
if(ListBox.SelectedItems!=null)
{
int count=ListBox.SelectedItems.count-1;
对于(int i=count;i>=0;i--)
{
//myDataList.Add(ListBox.SelectedItems[i]);
ListBox.Items.Remove(ListBox.SelectedItems[i]);
}
ApplyDataBinding();
}
}
私有void ApplyDataBinding()
{
MyAutoCompleteBox.ItemsSource=null;
MyAutoCompleteBox.ItemsSource=myDataList;
}
}

对于初学者,如果您对myDataList使用ObservableCollection而不是List,则只需添加和删除项,控件就会自动更新

第二,尽量不要在迭代时删除项目。首先将它们单独列在一个列表中


最后,您在哪里创建myDataList

您可以只绑定到其selectedItem属性,而不是为自动完成框指定名称并以这种方式检查其所选项目。然后在“添加按钮\单击”中,您只需添加绑定到的选定项。

谢谢您的建议。是的,我没有创建myDataList。我错误地修改了代码并留下了它。我将尝试更改为可观察的集合。希望,我会使它工作。我想知道你是否可以告诉我任何工作样品。我很难让它工作。再次感谢你。
public partial class MainPage : UserControl
{
    private IList<string> myDataList = null;
    string currentItemText;
    public IList<string> Items
    {
        get;
        private set;
    }

    public MainPage()
    {
        InitializeComponent();

        Items = new List<string>();
        Items.Add("One");
        Items.Add("Two");
        Items.Add("Three");
        Items.Add("Four");

        DataContext = this;
    }

    private void AddButton_Click(object sender, RoutedEventArgs e)
    {
        if (MyAutoCompleteBox.SelectedItem != null)
        {

            foreach (var item in MyAutoCompleteBox.SelectedItem)
            {
                ListBox.Items.Add(item);
                myDataList.Remove(item);
            }
            ApplyDataBinding();
        }
    }

    private void RemoveButton_Click(object sender, RoutedEventArgs e)
    {
        if (ListBox.SelectedItems != null)
        {
            int count = ListBox.SelectedItems.Count - 1;
            for (int i = count; i >= 0; i--)
            {
                //myDataList.Add(ListBox.SelectedItems[i]);
                ListBox.Items.Remove(ListBox.SelectedItems[i]);
            }
            ApplyDataBinding();
        }
    }

    private void ApplyDataBinding()
    {
        MyAutoCompleteBox.ItemsSource = null;
        MyAutoCompleteBox.ItemsSource = myDataList;
    }

}