我是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
问题
我可以用这个或类似的方式获取字符串值吗?如果是的话,请怎么样?
答案 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