2013-02-21 47 views
1

因此,尽管在网上找到文章,我仍然无法弄清楚这一点。动态更新数据绑定列表框C#WPF

我有一个列表框

<ListBox HorizontalAlignment="Left" Margin="54,35,0,0" Name="resultsbox" VerticalAlignment="Top" Width="382" Visibility="Collapsed"> 
    <DataTemplate> 
     <StackPanel> 
      <TextBlock Text="{Binding nameElement}"/> 
     </StackPanel> 
    </DataTemplate> 
</ListBox> 

即数据绑定到

ObservableCollection<string> results = new ObservableCollection<string>(); 

,并与

private void searchbox_TextChanged(object sender, TextChangedEventArgs e) 
    { 

    resultsbox.Visibility = Visibility.Visible; 

    resultsbox.ItemsSource = results; 



    if (results.Count == 0) 
    { 
     foreach (ele item in eles) 
     { 
      if (!results.Contains(item.nameElement)) 
      { 
       results.Add(item.nameElement); 
      } 
     } 
    } 
    else 
    { 
     resultsbox.Items.Clear(); 
    } 

    if (searchbox.Text.Equals("")) 
    { 
     window1.Height = 47; 
     resultsbox.Visibility = Visibility.Collapsed; 
    } 


    if (resultsbox.Items.Count == 0) 
    { 
     resultsbox.Visibility = Visibility.Collapsed; 
     window1.Height = 47; 
    } 
    else{ 
     window1.Height = 47 + (22 * resultsbox.Items.Count); 
    } 
    } 

它加载在那里所有的数据更新,但不会更新!

如果我这样做resultsbox.clear()它说你不能清除绑定项目。如果你尝试清除源码,它什么也不做。如果您尝试将resultsbox项目源设置为null,并清除源并重新绑定它,则不会有任何结果。如果你尝试和列表框绑定到一个空的源是什么都不做....

回答

0

答案被改变的更新foreach循环从

resultsbox.ItemsSource = results; 
    if (results.Count == 0) 
    { 
     foreach (ele item in eles) 
     { 
      if (!results.Contains(item.nameElement)) 
      { 
       results.Add(item.nameElement); 
      } 
     } 
    } 

results.Clear(); 
    foreach (ele item in eles) 
    { 
     if (item.nameElement.ToLower().Contains(searchbox.Text.ToLower())) 
     { 
      results.Add(item.nameElement); 
     } 
    } 

resultsbox.ItemsSource = results; 
-1

您可以尝试使用双向模式绑定到IMO达到您的要求,

<ListBox HorizontalAlignment="Left" Margin="54,35,0,0" Name="resultsbox" VerticalAlignment="Top" Width="382" Visibility="Collapsed"> 
<DataTemplate> 
    <StackPanel> 
     <TextBlock Text="{Binding nameElement, Mode=TwoWay}"/> 
    </StackPanel> 
</DataTemplate> 

+1

仍不会更新 – 2013-02-21 03:51:29