2014-06-22 51 views
1

当我添加到组合框属性IsEditable="True"它会自动收到“自动完成”行为。Auto Suggest ComboBox - MVVM

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

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

(如果可能的话=不破坏MVVM)

回答

2

在这里,您使用标准组合框和动画

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

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

初始化ComboItems

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

您的藏品取代我的项目

+0

我在寻找自动提示,这意味着任何时候你添加文字的组合框与suggestes通过你写的文本过滤器打开。 –

+0

那么你也转发组合列表进行过滤吗?你也许可以分享一些屏幕了解更多细节。 – pushpraj

+0

为什么IsTextSearchEnable无法完成这项工作? –