如何向WPF组合框添加向下类型支持?
这是我的组合框:如何向WPF组合框添加向下类型支持?,wpf,wpf-controls,Wpf,Wpf Controls,这是我的组合框: <ComboBox Name="ApplicationList" MinWidth="200" Margin="4" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding ApplicationName}"/>
<ComboBox Name="ApplicationList" MinWidth="200" Margin="4" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ApplicationName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
如果组合框只包含字符串,我将免费获得向下键入支持。但是如何启用复杂对象的向下类型支持 一个解决方法是在模型上重写ToString方法,但我正在寻找一个更通用的解决方案。我发现您不想在模型中重写ToString,这是有道理的。但是如果将视图和xaml代码绑定到模型,那么您就错过了中间人的好处:ViewModel 在您的情况下,我将使用ViewModel在ApplicationList中包装各个项目。让我们假设ApplicationList是ApplicationModel类型的集合,所以可能是ObservableCollection。如果您将其更改为ObservableCollection,其中每个**ApplicationViewModel都有一个对ApplicationModel的私有引用,那么您可能会对该对象的表示感到疯狂。您可以加入ToString、创建的日期时间以及与用户界面相关的所有内容,而无需对您的模型进行修改 关键是,除了通过对ApplicationViewModel类的严格控制之外,没有任何类可以接触到ApplicationModel类,同时使您能够充分处理与用户界面相关的事情。每节课都这样做,你永远不会回头。另一个好处是,您可以非常轻松地测试模型类,而不受UI内容的影响。设置属性名称:
<ComboBox Name="ApplicationList" TextSearch.TextPath="ApplicationName" MinWidth="200" Margin="4">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ApplicationName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
从文件中:
对以下控件使用此属性:
包含项目的集合。这个
指定属性的值是
用户可以键入以选择的文本
项目,以及
如果控件设置为
在文本框中显示文本
编辑:无需将IsEditable设置为True。有两种方法可以使其重新工作。如果你正在做一些和你的例子一样简单的事情,你可以设置
DisplayMemberPath="ApplicationName"
而不是指定ItemTemplate
如果需要更多选项来格式化需要使用ItemTemplate的项目,请将TextSearch.TextPath设置为要对其进行文本选择的属性:
TextSearch.TextPath="ApplicationName"
虽然人们给了我很多有趣的想法,但你的想法是唯一一个不需要在对象模型上乱搞的想法。
TextSearch.TextPath="ApplicationName"