1

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

我有一个列表框

<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(),则表示您无法清除绑定的项目。如果您尝试清除源,它什么也不做。如果您尝试将结果框 itemsource 设置为 null 并清除源然后重新绑定它,什么都没有。如果您尝试将列表框绑定到一个空源,它什么也不做......

4

2 回答 2

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;
于 2013-02-21T04:07:38.337 回答
-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>

于 2013-02-21T03:49:35.060 回答