gpt4 book ai didi

c# - 简单的 WPF 组合框过滤器

转载 作者:行者123 更新时间:2023-11-30 13:12:50 25 4
gpt4 key购买 nike

我在谷歌上搜索了一个简单的解决方案,但没有成功。我有一个标准的 WPF 组合框,我只是希望能够在组合框具有焦点时根据用户键入的前 2 或 3 个字母来过滤显示的列表。我尝试了一些编码,包括一些兰巴表达式,但错误“System.NotSupportedException”一直在指定“combobox.Items.Filter”的行上抛出。我没有使用 MVVM,只是希望用户可以使用这个简单的功能。请帮忙!附言IsEditable、IsTextSearchEnabled 和 StaysOpenOnEdit 属性设置为 true,但尚未实现所需的功能。

最佳答案

我开发了一个示例应用程序。我使用字符串作为记录项,您可以使用自己的实体来完成。退格键也能正常工作。

 public class FilterViewModel
{
public IEnumerable<string> DataSource { get; set; }

public FilterViewModel()
{
DataSource = new[] { "india", "usa", "uk", "indonesia" };
}
}

public partial class WinFilter : Window
{
public WinFilter()
{
InitializeComponent();

FilterViewModel vm = new FilterViewModel();
this.DataContext = vm;
}

private void Cmb_KeyUp(object sender, KeyEventArgs e)
{
CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(Cmb.ItemsSource);

itemsViewOriginal.Filter = ((o) =>
{
if (String.IsNullOrEmpty(Cmb.Text)) return true;
else
{
if (((string)o).Contains(Cmb.Text)) return true;
else return false;
}
});

itemsViewOriginal.Refresh();

// if datasource is a DataView, then apply RowFilter as below and replace above logic with below one
/*
DataView view = (DataView) Cmb.ItemsSource;
view.RowFilter = ("Name like '*" + Cmb.Text + "*'");
*/
}
}

XAML

<ComboBox x:Name="Cmb"
IsTextSearchEnabled="False"
IsEditable="True"
ItemsSource="{Binding DataSource}"
Width="120"
IsDropDownOpen="True"
StaysOpenOnEdit="True"
KeyUp="Cmb_KeyUp" />

Output

关于c# - 简单的 WPF 组合框过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34382459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com