wpf - 自动建议组合框 - MVVM

标签 wpf mvvm combobox autocomplete autosuggest

当我将属性 IsEditable="True" 添加到组合框时,它会自动接收“自动完成”行为。

有没有办法向此组合框添加“自动建议”行为?

我的意思是,当在组合框中写入时,会打开带有上述标题的选项列表。

(如果可能=不破坏MVVM)

最佳答案

给你

我尝试使用标准组合框和动画添加自动建议类型的行为

<ComboBox IsEditable="True">
    <ComboBoxItem>Orange</ComboBoxItem>
    <ComboBoxItem>Apple</ComboBoxItem>
    <ComboBoxItem>Banana</ComboBoxItem>
    <ComboBoxItem>Cherry</ComboBoxItem>
    <ComboBox.Triggers>
        <EventTrigger RoutedEvent="TextBoxBase.TextChanged">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsDropDownOpen">
                        <DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:0"/>
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </ComboBox.Triggers>
</ComboBox>

尝试一下,让我知道这是否是您正在寻找的,更复杂的行为可能需要一些额外的努力

为组合项目添加建议过滤器

xaml

<ComboBox IsEditable="True"
            ItemsSource="{Binding ComboItems}"
            Text="{Binding ComboText,Mode=OneWayToSource}">
    <ComboBox.Triggers>
        <EventTrigger RoutedEvent="TextBoxBase.TextChanged">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsDropDownOpen">
                        <DiscreteBooleanKeyFrame Value="True"
                                                    KeyTime="0:0:0" />
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </ComboBox.Triggers>
</ComboBox>

查看模型

public ICollectionView ComboItems{ get; set; }

public string ComboText
{
    get
    {
        throw new NotImplementedException();
    }
    set
    {
        ComboItems.Filter = item => item.ToString().ToLower().Contains(value.ToLower());
    }
}

您可能需要根据您的项目类型进行过滤,上面是针对字符串值的

初始化组合项

var myItems = new[] { "Apple", "Orange", "Cherry", "Banana" };
ComboItems = CollectionViewSource.GetDefaultView(myItems);

用你的收藏替换我的元素

关于wpf - 自动建议组合框 - MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24350097/

相关文章:

c# - 如何添加 Canvas 边框

c# - ItemsControl 和 Canvas 中的多个数据模板

安卓 MVVM : Does using Glide directly in a fragment break the MVVM pattern?

css - 如何在 JavaFX 中使用 CSS 获取 JFXTextField 或 TextField 中的圆 Angular

wpf - 在组合框中显示 FontFamily

ExtJs ComboBox 自动展开

c# - 如何在 wpf 中刷新页面或窗口?

c# - 如何在第二台显示器上显示闪屏?

c# - 我的 Windows 应用商店应用程序在关闭后仍在 Debug模式下运行

c# - 使用 MVVM 在一个 WPF 事件中多次观察属性更改?