c# – 将ComboBox的SelectedValue绑定到WPF中的枚举
我想在ListView中显示产品列表,其中一列是我想要绑定的ComboBox.这是我的枚举:
public enum SelectionMode { One,Two } 和产品类: public class Product { public SelectionMode Mode { get; set; } public string Name { get; set; } } 在ViewModel类中,我有一个Product的ObservableCollection: private ObservableCollection<Product> _productList; public ObservableCollection<Product> ProductList { get { return _productList; } set { _productList = value; } } public MainViewModel() { ProductList = new ObservableCollection<Product> { new Product {Mode = SelectionMode.One,Name = "One"},new Product {Mode = SelectionMode.One,new Product {Mode = SelectionMode.Two,Name = "Two"} }; } 最后我有一个带有ListView的Grid,它绑定到我的ProductList: <Window.Resources> <ObjectDataProvider x:Key="AlignmentValues" MethodName="GetNames" ObjectType="{x:Type System:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="ViewModel:SelectionMode" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> <Grid> <ListView Height="120" HorizontalAlignment="Left" VerticalAlignment="Top" SelectionMode="Multiple" ItemsSource="{Binding ProductList}" > <ListView.View> <GridView> <GridViewColumn Width="120" Header="Product Name" DisplayMemberBinding="{Binding Path=Name}" /> <GridViewColumn Header="Selection Mode"> <GridViewColumn.CellTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding Source={StaticResource AlignmentValues}}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> </Grid> 我的问题是;将ComboBox的SelectedValue绑定到Product类的SelectionMode属性的方法是什么? 更新 好.我在this topic找到了答案.所以我必须添加转换器类: public class MyEnumToStringConverter : IValueConverter { public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture) { return value.ToString(); } public object ConvertBack(object value,System.Globalization.CultureInfo culture) { return (SelectionMode)Enum.Parse(typeof(SelectionMode),value.ToString(),true); } } 并将其添加到窗口资源: <Window.Resources> <ObjectDataProvider x:Key="AlignmentValues" MethodName="GetNames" ObjectType="{x:Type System:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="ViewModel:SelectionMode" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> <Converters:MyEnumToStringConverter x:Key="MyEnumConverter"/> </Window.Resources> 最后编辑ComboBox数据模板: <ComboBox ItemsSource="{Binding Source={StaticResource AlignmentValues}}" SelectedValue="{Binding Path=Mode,Converter={StaticResource MyEnumConverter}}"/> 就这样. 解决方法
如果您准备更改ComboBox的ItemsSource的绑定,那么,只需SelectedValue =“{Binding Mode,UpdateSourceTrigger = PropertyChanged,Mode = TwoWay}”将起作用.
在这种情况下,您必须像这样绑定ItemsSource:ItemsSource =“{Binding RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type ViewClass}},Path = ModeList}”;其中,ModeList是SelectionMode类型列表的简单公共属性,包含应该在ComboBox下拉列表中显示的枚举,而ViewClass是此属性(ModeList)可用的类;确保在xaml中添加了名称空间的引用. 否则你必须使用转换器,它应该将字符串转换回枚举类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |