【问题标题】:Adding Filter TextBox to a ComboBox using MVVM in WPF在 WPF 中使用 MVVM 将过滤器文本框添加到组合框
【发布时间】:2019-03-15 10:13:18
【问题描述】:

我要做的是创建一个 ComboBox,其中顶部有一个文本框,我可以输入该文本框来过滤 ComboBox 中的项目。这是我的意思的一个例子:

我需要使用 MVVM 方法来执行此操作。我不知道如何去做或如何覆盖样式来做到这一点。我在谷歌上寻找了几种解决方案,但没有一个完全是我需要的。我很确定一旦创建了样式,我就可以在我的视图模型中找出过滤部分。

任何帮助将不胜感激。

【问题讨论】:

标签: c# wpf mvvm filter


【解决方案1】:

在我的项目中,当我做这样的事情时,我会在下拉内容模板中添加一个 TextBox 作为第一项,然后是需要数据绑定的项目的演示者。

 <ComboBox>
    <ComboBox.ItemTemplate>
      <DataTemplate>
        <StackPanel Orientation="Horizontal">
        <TextBox Text="{Binding Path=FilteredText"} Mode="TwoWay"/>
        <ListBox ItemSource="{Binding Path=ItemsForBinding}" Mode="TwoWay" NotifyOnSourceUpdated="True" />
        </StackPanel>
      </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

在您的视图模型中,确保在更新时为 FilteredText 属性启用 NotifyOnProperyChanged,它将触发绑定项的“删除”,我通常使用 ObservableCollection,但我知道 ListCollectionView 具有以下功能过滤并在集合更改时通知 UI。您甚至可以找到第 3 方文本 AutoCompleteBox(我使用 Telerik),它允许您在“文本框”中预填充您希望用户能够过滤的术语。

【讨论】:

  • 你测试了吗?
【解决方案2】:

使用来自ComboBox 控件的IsTextSearchEnabled,如下所示:

<ComboBox IsTextSearchEnabled="True" IsTextSearchCaseSensitive="True or False depending on your scenario" />

【讨论】:

  • 别忘了IsEditEnabled=true
  • 是的,我的错
  • 哇,这比我想象的要容易得多。
  • 如果对您有帮助,别忘了将其标记为答案 :)
  • 实际上这很接近但并不完全。我想实际过滤项目而不是搜索它们。
猜你喜欢
  • 2017-09-02
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
相关资源
最近更新 更多