[英]How do you bind an enum to a dependency property to a combobox in WPF?
我已經閱讀了幾篇文章和stackoverflow的帖子,但是我仍然對如何使它起作用感到有些困惑。
我有一個要綁定到依賴項屬性的枚舉列表,然后將其綁定到組合框。 當我加載程序時,組合框為空。
一旦工作成功,我想在框中顯示名稱(即附件),並以十六進制作為值。
XAML:
<ComboBox ItemsSource="{Binding BodyTypeFlags}" />
C#:
public enum BodyTypeFlagsTS4
{
Accessory = 0x0000000A,
Blush = 0x00000020
}
public BodyTypeFlagsTS4 BodyTypeFlags
{
get { return (BodyTypeFlagsTS4)GetValue(BodyTypeFlagsProperty); }
set { SetValue(BodyTypeFlagsProperty, value); }
}
public static readonly DependencyProperty BodyTypeFlagsProperty =
DependencyProperty.Register("BodyTypeFlags", typeof(BodyTypeFlagsTS4),
typeof(MainWindow), new PropertyMetadata(default(BodyTypeFlagsTS4)));
編輯:我已經按照建議完成,現在可以在組合框中看到枚舉項目的列表。 我有兩個問題:
如果我刪除了=十六進制部分(因此,它只具有附件和腮紅),那么每次測試按鈕都會隨附件一起返回。 即使我選擇了腮紅。 (我不想更改枚舉格式,但這告訴我雙向綁定不起作用。)
public BodyTypeFlagsTS4 BodyTypes { get { return (BodyTypeFlagsTS4)GetValue(BodyTypesProperty); } set { SetValue(BodyTypesProperty, value); } } public static readonly DependencyProperty BodyTypesProperty = DependencyProperty.Register("BodyTypes", typeof(BodyTypeFlagsTS4), typeof(MainWindow), new PropertyMetadata()); private void Button_Click(object sender, RoutedEventArgs e) { Dispatcher.BeginInvoke(new Action(() => { System.Windows.MessageBox.Show(System.Enum.GetName(typeof(BodyTypeFlagsTS4), this.BodyTypes)); })); }
您需要提供ComboBox
的可用值列表。 例如:
public BodyTypeFlagsTS4[] AvailableBodyTypeFlags
{
get { return (BodyTypeFlagsTS4[])Enum.GetValues(typeof(BodyTypeFlagsTS4)); }
}
然后將您的ComboBox
綁定到列表:
<ComboBox ItemsSource="{Binding AvailableBodyTypeFlags}"
SelectedItem="{Binding BodyTypeFlags}" />
而且您實際上不需要依賴項屬性。 在視圖模型中實現INotifyPropertyChanged
就足夠了。
嘗試以下解決方案: 壓縮解決方案
通常,您必須用對象包裝枚舉。 查看注釋掉的代碼,以了解如何檢索枚舉的名稱。
XAML代碼的一部分:
<Grid.Resources>
<ObjectDataProvider x:Key="tools"
MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:Tool" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Grid.Resources>
<ComboBox x:Name="cmbTools"
ItemsSource="{Binding Source={StaticResource tools}}"
SelectedItem="{Binding Path=ToolType, Mode=TwoWay}" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.