【发布时间】:2014-04-06 04:36:49
【问题描述】:
我需要允许从这个预定义列表中选择几个项目:
public enum QuarkType{
Up,
Down,
[Description("Magical Being")] Charm,
[Description("Quite Odd")] Strange,
Top,
Bottom
}
所以我使用CheckComboBox,并在需要使用自定义描述的地方使用DescriptionAttribute。我使用MarkupExtension 提供CheckComboBox,它返回给定enum 的所有值的列表作为IEnumerable<EnumDescriptionPair>,其中EnumDescriptionPair 是:
public class EnumDescriptionPair{
public object Value { get; set; }
public string Description { get; set; }
}
现在的问题是如何将这个列表的Values 传递给代码隐藏列表:
public ObservableCollection<QuarkType> SelectedQuarksList { get; set; }
我的意思是,对于所选列表的每个项目,如何从 EnumDescriptionPair 中只取出 Value ?
这是我迄今为止所拥有的。它显然不起作用(意味着它在CheckComboBox 中显示正确的字符串,并允许选择多个项目,但没有反映在上面提到的SelectedQuarksList 中):
<Window x:Class="MyEditor.MainWindow"
xmlns:loc="clr-namespace:MyEditor"
xmlns:toolKit="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<StackPanel>
<toolKit:CheckComboBox x:Name="Ccb" Delimiter=","
ItemsSource="{loc:EnumItemsValueConverter {x:Type loc:QuarkType}}"
DisplayMemberPath="Description"
SelectedItemsOverride="{Binding SelectedQuarksList}" />
<ListBox ItemsSource="{Binding SelectedQuarksList}" />
</StackPanel>
</Window>
【问题讨论】:
-
既然列表是预定义的,那么需要绑定复选框列表吗?我之前使用 XAML 中声明的所有选项并绑定到枚举,但不是您描述的方式。 +1 提出一个很好的问题。
-
@LordTakkera - 我不确定我是否理解你的建议,但我愿意接受建议
-
我试图解释我的建议在我的回答中,希望它们对你有用。
-
@LordTakkera - 我不能使用你的答案,因为
enum可能会发生变化 - 整个想法是我们可以经常更改它
标签: c# wpf data-binding wpftoolkit