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