【问题标题】:Auto Suggest ComboBox - MVVM自动建议组合框 - MVVM
【发布时间】:2014-08-12 13:25:03
【问题描述】:

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

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

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

(如果可能 = 不破坏 MVVM)

【问题讨论】:

    标签: wpf mvvm combobox autocomplete autosuggest


    【解决方案1】:

    给你

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

    <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);
    

    用你的收藏替换我的物品

    【讨论】:

    • 我正在寻找自动建议,这意味着每当您添加文本时,组合框都会打开,其中包含根据您编写的文本过滤的建议。
    • 那么您是否也转发要过滤的组合列表?您也许可以分享一些屏幕以获取更多详细信息。
    • 由于设置 IsEditable 启用了类似的行为,因此 IsTextSearchEnable 将是多余的。这是 ComboBox 不可用的主要原因。 IsTextSearchEnable 适用于那些没有为此目的集成 TextBox 的项目控件,例如 ListBox、ItemsControl 等。
    • 有办法取消自动完成吗?
    • 这是您可以使用 IsTextSearchEnable 并将其设置为 false 以禁用自动完成的地方,例如 IsTextSearchEnabled="False"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2011-09-01
    相关资源
    最近更新 更多