我希望复杂的组合框有复选框,文本,并且可能是缩略图。我已经看过以下链接,这些链接在构建复杂的组合框时帮助了我很多。
Looking for a WPF ComboBox with checkboxes
但是,我找不到在我的应用程序中使用这些复杂的usercontol的方法。我是WPF的新手,所以任何形式的演示支持都会受到高度赞赏。
Dean,我正在寻找一个如何使用以前在SO帖子中提到的示例绑定文件后面的代码的解决方案。
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding DayOfWeek}"
Width="100" />
</StackPanel>
</DataTemplate>
所以问题是,我是否需要DataTable或其他东西来使用这个组合框模板绑定我的Checkbox和标题列表? 在此先感谢
答案 0 :(得分:3)
Combobox是一个ItemsControl。所有ItemsControls都可以用项目或容器“硬编码”填充。
这会在组合框中添加一个新条目,并将字符串包装到ItemsContainer中,这是一个ComboBoxItem。
<ComboBox>
<sys:string>Hello</string>
<ComboBox>
这里我们直接创建一个组合框项目,并将其内容添加到值为“Hello”的字符串中
<ComboBox>
<ComboBoxItem Content="Hello"/>
<ComboBox>
两者看起来都是一样的。重要的是要理解在第一种情况下,ComboBox负责将我们的ComboBox未知类型字符串包装到ComboBoxItem中,并使用默认的DataTemplate来显示它。默认的DataTemplate将显示一个TextBlock,并在给定的数据项上调用ToString()。
现在要获得动态数据,我们需要一个带有数据项的ObservableCollection。
class Employee
{
public BitmapSource Picture {get;set;}
public string Name{get;set}
}
ObservableCollection<Employee> employees;
myComboBox.ItemsSource = employees;
我们有一个名为Employee的DataClass,一个可观察的Collection,它包含我们的许多dataitem,并将此集合设置为ItemsSource。从现在开始,我们的Combobox会收听对此集合的更改。就像添加和删除Employees一样,并自动将新Employee包装到ComboBoxItem中。一切都是自动完成的。我们唯一需要做的就是提供一个合适的DataTemplate。组合框不知道如何“显示”员工,这正是DataTemplate的用途。
<DataTemplate x:Key="employeeTemplate">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Picture}"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
我们知道员工被包装在ComboBoxItem中,ComboBoxItem使用提供的Datatemplate来显示其数据,这意味着在DataTemplate中我们可以使用Binding来访问数据项上的所有属性。
希望对你有所帮助。
答案 1 :(得分:1)
回答你的问题。您只需要一个具有至少2个公共属性的对象的集合(IsSelected为bool,DayOfWeek为字符串),并将这些集合设置为itemssource。 所以你需要的只是这样一个对象的集合。如果你需要一个例子,请发表评论。
ps:请通过www阅读wpf和绑定以获取基础知识。
答案 2 :(得分:0)
你可以直接添加项目
<ComboBox>
<ComboBox.Items>
<ComboBoxItem>
<TextBlock Text="test text" />
</ComboBoxItem>
<ComboBoxItem>
<CheckBox Content="test checkbox" />
</ComboBoxItem>
<ComboBoxItem>
<Button Content="test button" />
</ComboBoxItem>
</ComboBox.Items>
</ComboBox>
或者如果你想使用ItemsSource,则需要一个DataTemplateSelector
<ComboBox>
<ComboBox.ItemTemplateSelector>
<local:MyCustomTemplateSelector />
</ComboBox.ItemTemplateSelector>
</ComboBox>
这是一个解释DataTemplateSelectors
的链接