动态更新数据绑定列表框C#WPF

时间:2013-02-21 03:33:51

标签: c# wpf data-binding listbox clear

因此,尽管在网上找到文章,我仍然无法弄清楚这一点。

我有一个列表框

<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 itemsource设置为null并清除源,则重新绑定它,不执行任何操作。如果您尝试将列表框绑定到空源,它什么都不做....

2 个答案:

答案 0 :(得分: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 :(得分:-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>