【问题标题】:How to add selected item from AutoCompleteBox to ListBox or Datagrid?如何将所选项目从 AutoCompleteBox 添加到 ListBox 或 Datagrid?
【发布时间】:2011-03-06 23:44:49
【问题描述】:

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

XAML:

<UserControl 
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  
x:Class="AutoCompleteBoxSimpleTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
mc:Ignorable="d" >

<StackPanel x:Name="LayoutRoot" Background="White" Width="150">
    <TextBlock Text="{Binding ElementName=MyAutoCompleteBox, Path=SelectedItem, TargetNullValue='No item selected', StringFormat='Selected Item: {0}'}" />      
    <sdk:AutoCompleteBox x:Name="MyAutoCompleteBox" IsTextCompletionEnabled="True" ItemsSource="{Binding Items}" />
    <Button x:Name="AddButton" Click="AddButton_Click" Content="AddButton" />
    <Button x:Name="RemoveButton" Click="RemoveButton_Click" Content="RemoveButton" />
    <ListBox x:Name="ListBox" BorderThickness="0" SelectionMode="Multiple" />

    <sdk:DataGrid x:Name="dgEditPackageProperties_ADEntities">
        <sdk:DataGrid.Columns>
            <sdk:DataGridTemplateColumn x:Name="dgtcEditPackageProperties_Icon"/>
            <sdk:DataGridTextColumn x:Name="dgtcEditPackageProperties_Entities" Header="AD Entities with Access" /> 
        </sdk:DataGrid.Columns> 
    </sdk:DataGrid>
</StackPanel>

代码背后:

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;
    }

}

【问题讨论】:

    标签: wpf silverlight-4.0 wpf-controls wpftoolkit


    【解决方案1】:

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

    其次,在迭代它们时尽量不要删除它们。首先将它们放在单独的列表中。

    最后,你在哪里创建 myDataList ? :)

    【讨论】:

    • 谢谢你的想法。是的,我没有创建 myDataList。我修改了代码并错误地留下了它。我将尝试更改为可观察的集合。希望我能成功。
    • 我想知道您是否可以向我指出任何工作示例。我很难让它工作。再次感谢您。
    【解决方案2】:

    您可以绑定到其 selectedItem 属性,而不是为自动完成框命名并以这种方式检查其选定项。然后在您的“AddButton_Click”中,您可以简单地添加您绑定到的 selectedItem。

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2015-10-22
      • 2013-01-05
      • 1970-01-01
      相关资源
      最近更新 更多