2011-03-06 2 views
0

나는 항목 모음에서 임의의 항목을 선택하고 '추가'단추를 클릭하여이 텍스트 문자열을 목록 상자 또는 데이터 격자에 추가 할 수있는 시나리오를 작성하려고합니다. 또한 '제거'버튼을 클릭하여 목록 상자 또는 DataGrid에서 항목을 제거 할 수 있어야합니다. 나는 이것을 시작했으나 문제를 일으켜서 작동하게 만들었다. 문제가 뭔지 궁금합니다. 어떤 아이디어든지 높게 평가된다. 고맙습니다!AutoCompleteBox에서 선택한 항목을 ListBox 또는 Datagrid에 추가하는 방법은 무엇입니까?

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> 

코드 : 대신 목록 <의 myDataList에 대한 ObservableCollection에 <>를 사용하는 경우 우선 들어

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

} 

답변

1

은> 당신은 단지 추가하고 제거 할 수 있습니다 항목을 선택하면 컨트롤이 자동으로 업데이트됩니다.

둘째, 항목을 반복하는 동안 항목을 제거하지 마십시오. 먼저 그것들을 별도의 목록에 넣으십시오.

마지막으로 어디에서 myDataList를 만들 수 있습니까? :)

+0

아이디어에 감사드립니다. 예, myDataList를 만들지 않았습니다. 코드를 수정하여 실수로 남겼습니다. 나는 관찰 가능한 수집으로 바꾸려고 노력할 것이다. 바라건대, 나는 그것을 효과가있게 만들 것이다. – vladc77

+0

실용적인 샘플을 가르쳐 주실 수 있는지 궁금합니다. 나는 그것을 작동하게하는 데 어려움이있다. 다시 감사합니다. – vladc77

0

자동 완성 상자에 이름을 지정하고 선택한 항목을 그런 식으로 검사하는 대신 selectedItem 속성에 바인딩하면됩니다. 그런 다음 "AddButton_Click"에서 간단히 바인드 할 selectedItem을 추가 할 수 있습니다.

관련 문제