【问题标题】:Looping through (and removing) items of a bound ComboBox循环遍历(和删除)绑定 ComboBox 的项目
【发布时间】:2011-10-13 19:51:44
【问题描述】:

我是 WPF 的新手 - 并且痛苦地意识到它。我没有成功地寻找到这个特定问题的答案,现在我正在向知识渊博的同行寻求建议!

场景

我正在使用的应用程序允许用户将新记录输入数据库,或修改现有记录。

我有一个包含绑定 ComboBox 的表单。它从数据库中填充,由公开 DTO 的 WPF 服务访问。

从 UI 的角度来看,表单有两种模式: 1.输入新记录 2. 修改现有记录

有问题的 ComboBox 在这两种情况下都会出现,但要求是当表单处于“修改”模式时可见的选项更少。

我要做的是在表单处于“修改”模式时循环遍历 ComboBox 项目并删除/隐藏不应出现的选项。

XAML

<ComboBox x:Name="RecordType"  Grid.Column="1" Grid.Row="1"  Width="150"  HorizontalAlignment="Left" SelectedValue="{Binding Path=RecordTypeID,TargetNullValue=0}"/>

背后的代码 - 以及到目前为止我的(微弱的!)尝试

foreach (ComboBoxItem item in this.RecordType.Items)
{
    if (IsApplicable(item.Content.ToString()) == false)
    {
        item.Visibility = Visibility.Hidden;
    }
}

(注意:IsApplicable() 是一个简单的方法,它将接收到的字符串与表单处于“修改”模式时允许出现的选项列表进行比较。)

问题

我相信你们中的许多人已经知道...不能将 DTO 类型的对象转换为 System.Windows.Controls.ComboBoxItem 类型

问题

我可以通过这种方式或类似方式获取字符串值吗?如果可以,请问怎么做?

【问题讨论】:

  • 如何填充组合框?

标签: wpf combobox


【解决方案1】:

这样做的正确方法是在集合视图上应用过滤器 见Automatically Filtering a ComboBox in WPF

ICollectionView view = CollectionViewSource.GetDefaultView(comboBox.ItemsSource);
view.Filter = IsApplicable
view.Refresh(); // <-- call this whenever you change the view model

【讨论】:

  • 谢谢,哈桑。这对我有用。 (p.s. 只要达到 15 个代表点,我就会回来投票!)
【解决方案2】:

如果您将组合框绑定到 ObservableCollection,然后在需要时从集合中删除项目,这可能会更容易。

这里是一个例子:http://www.tanguay.info/web/index.php?pg=codeExamples&id=304

【讨论】:

  • 谢谢乔。我确实尝试过这个,但无法让它工作。这可能更多地与我的n00bness有关。
猜你喜欢
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多