Wpf Comboxbox 可选默认项
我有一个组合框,它从我的视图模型数据绑定到可观察集合。我可以让我的列表填充数据,但我还想添加一个默认项目,例如“--All Models--”。下面的代码将“--All Models--”显示为默认项目,但如果您选择其他项目,则该项目不可选。
<ContentControl Content="{Binding Items}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Grid>
<ComboBox x:Name="cb" ItemsSource="{Binding}"/>
<TextBlock x:Name="tb" Text="--Choose One--" IsHitTestVisible="False" Visibility="Hidden"/>
</Grid>
<DataTemplate.Triggers>
<Trigger SourceName="cb" Property="SelectedItem" Value="{x:Null}">
<Setter TargetName="tb" Property="Visibility" Value="Visible"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
我尝试过使用复合集合,但这似乎不起作用。有办法做到这一点吗?
提前致谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
CompositeCollection
应该可以工作,如果你知道如何使用它的话;它的一个重要的事情是它不继承DataContext
,这意味着您需要以某种其他方式引用您的源,如果该方法是x :Reference
您不能创建循环引用,可以通过将集合放置在所引用元素的资源中来避免这种情况。例如,您可以通过
ItemsSource="{StaticResource compCollection}"
使用它。CompositeCollection
should work, if you know how to use it that is; one important thing about it is that it does not inherit aDataContext
, this means you need to reference your source in some other manner, further if that method isx:Reference
you may not create a cyclic reference, this can be avoided by placing the collection in the Resources of the element referenced. e.g.You can then just use this via
ItemsSource="{StaticResource compCollection}"
.将视图交互逻辑构建到视图模型中。我的建议是让 Observable 集合类型为由源列表填充的视图模型,再加上一个用于“未选择”项目的视图模型。
然后
您可以使用空语义处理 SelectedItem 的 Id 。
Build the view interaction logic into the viewmodel. my suggestion make the Observable collection type a viewmodel that is populated by the source list, plus one more viewmodel for the "not selected" item.
something like
Then you can process SelectedItem's Id with the null sematic.
您可以将集合通用类型更改为
object
并在其中添加 --All Models-- 事物。You can change your collection generic type to
object
and add there --All Models-- thing.