【发布时间】:2016-07-09 12:42:58
【问题描述】:
我已阅读其他几篇文章,但没有一篇能够回答我的问题组合
我有一个 ComboBox,我想在其中显示不同颜色的项目,这可以通过使用 ComboBoxItem 并设置其背景来完成。当我想以不同的颜色存储我的 CategoryDTO 并且以后能够再次提取它们时,我的问题就出现了。我需要显示的只是我的 CategoryDTO 的颜色和 Name 属性。然后我必须能够从 SelectedItem 属性中获取 CategoryDTO 对象。我尝试了使用 ItemsSource、DisplayMemberPath 和 SelectedValuePath 的各种解决方案。但是只完成了这个
正如所见,它显示颜色,但仅显示所选 CategoryDTO 的名称,我什至还没有测试 SelectedItem 是否正常工作。
下面我将放置我使用的代码。
[Serializable]
public class CategoryDTO
{
public string Name { get; set; }
...not important...
}
CategoryDTO[] categories = await _isd.GetCategoriesAsync();
comboBoxCategory.ItemsSource = categories.Select(c => new CategoryComboBoxItem(c)).ToList();
comboBoxCategory.DisplayMemberPath = "Name";
comboBoxCategory.SelectedValuePath = "Name";
public class CategoryComboBoxItem : ComboBoxItem
{
public CategoryComboBoxItem(CategoryDTO category)
{
this.Background = new SolidColorBrush(category.Color);
this.Content = category;
}
}
我没有在 .xaml 中指定任何特殊内容,因此我将省略该部分。除此之外,我希望能够使用 Name 属性设置 SelectedItem。我非常喜欢代码隐藏的答案,但如果它是愚蠢的复杂 .xaml 只有答案也一样好。我对 MVVM 没有任何经验,我可以假设它会被建议。随着我对 WPF 的深入研究,我当然会扩展我对这件事的了解,但现在我只是希望它能够工作。
这不是家庭作业
编辑:忘记列出我也遇到的错误
System.Windows.Data 错误:4:找不到与引用“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.ItemsControl',AncestorLevel='1''的绑定源。
BindingExpression:Path=HorizontalContentAlignment;数据项=空;目标元素是'CategoryComboBoxItem'(名称='');目标属性是“HorizontalContentAlignment”(类型“HorizontalAlignment”) System.Windows.Data 错误:4:找不到与引用'RelativeSource FindAncestor,AncestorType='System.Windows.Controls.ItemsControl',AncestorLevel='1''进行绑定的源。
绑定表达式:路径=垂直内容对齐;数据项=空;目标元素是'CategoryComboBoxItem'(名称='');目标属性是“VerticalContentAlignment”(类型“VerticalAlignment”) System.Windows.Data 错误:26:ItemTemplate 和 ItemTemplateSelector 对于已经属于 ItemsControl 容器类型的项目被忽略;类型='CategoryComboBoxItem'
【问题讨论】:
-
您收到的错误是由于在您的 XAML 文件中设置的绑定错误。你能展示你的 XAML 标记吗?
-
嗨 Jay T。如上所述,我不在 XAML 中执行任何绑定。 XAML 中唯一的东西是空的 ComboBox。我相信错误来自在代码隐藏中滥用绑定。
标签: c# wpf data-binding combobox code-behind