循环(并删除)绑定的ComboBox项

时间:2011-10-13 10:56:51

标签: wpf combobox

我是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

问题

我可以用这个或类似的方式获取字符串值吗?如果是的话,请怎么样?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

以下是一个示例:http://www.tanguay.info/web/index.php?pg=codeExamples&id=304