2013-02-21 75 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