动态更新数据绑定列表框C#WPF
本文关键字:C#WPF 列表 数据绑定 更新 动态 | 更新日期: 2023-09-27 18:00:18
所以尽管我在网上找到了文章,但我仍然无法理解这一点。
我有一个列表框
<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并清除源,然后重新绑定它,则不执行任何操作。如果您尝试将列表框绑定到一个空源,它将不会起任何作用。。。。
答案是从更改更新中的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;
您可以尝试使用双向模式绑定来实现您的要求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>