WPF将枚举转换为数组
本文关键字:数组 转换 枚举 WPF | 更新日期: 2023-09-27 18:22:15
我正在开发一个WPF项目,需要用枚举中的值填充一个组合框。
我想通过实现这种双重转换来实现它(看看下面的代码)。我已经能够从一个方向实现互联网示例,但我无法解决相反的方向。
我对@BenRobinson的回答澄清了我的确切目的:ComboBox绑定到枚举,并绑定到一个包含SelectedItem并称为OpenedResultFilter的属性。我希望在更改此属性值时,组合框会更新所选项目。很抱歉造成混乱。。我对WPF不是很熟练
你能帮我吗?
<ComboBox
MinWidth="80"
ItemsSource="{Binding Converter={StaticResource EnumTypeToEnumArrayConverter}, ConverterParameter='Goldbet.GoldbetBackOffice.WPF.Model.ResultValidation.StagingOpenResultValidationFilter, Goldbet.GoldbetBackOffice.WPF.Model', Mode=OneWay}"
SelectedItem="{Binding OpenedResultFilter, Mode=TwoWay}"
HorizontalAlignment="Left"
Margin="1,2,1,2"
DockPanel.Dock="Left"/>
<UserControl.Resources>
<ResourceDictionary>
<Converters:BoolNullableToBoolConverter x:Key="BoolNullableToBoolConverter" />
<Converters:EnumTypeToEnumArrayConverter x:Key="EnumTypeToEnumArrayConverter"/>
public class StagingResultsBatchImportViewModel : WorkspaceViewModel, IHierarchyViewModel
{
private StagingOpenResultValidationFilter _openedResultFilter = StagingOpenResultValidationFilter.Tutti;
public StagingOpenResultValidationFilter OpenedResultFilter
{
get { return _openedResultFilter; }
set
{
if (_openedResultFilter != value)
{
_openedResultFilter = value;
OnPropertyChanged("OpenedResultFilter");
}
}
}
}
public class EnumTypeToEnumArrayConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Type enumType = Type.GetType((string)parameter);
return Enum.GetValues(enumType).Cast<int>().Select(p => Enum.ToObject(enumType, p));
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
如果您没有像我怀疑的那样使用MVVM,它会在XAML中名为enumCombo的组合框中显示所有枚举值:
public enum myEnum
{
One,
Two,
Four,
Eight
}
public partial class MainWindow : Window
{
private IEnumerable<string> _enumValues;
public MainWindow()
{
InitializeComponent();
_enumValues = ConvertEnumToStrings<myEnum>();
enumCombo.ItemsSource = _enumValues;
}
private static IEnumerable<string> ConvertEnumToStrings<T>()
{
var enumValues = Enum.GetValues(typeof(T))
.Cast<T>()
.Select(x => x.ToString())
.OrderBy(x => x)
.ToArray();
return enumValues;
}
}
如果您正在执行MVVM,则此枚举转换将在ViewModel中完成,并作为字符串集合(如上所述)或封装(枚举的)值和枚举值的友好名称的ViewModel公开,即在UI中具有用户友好功能的名称-值对。
对不起,我打开这个问题搞得一团糟。
实际的问题完全不同,所以,如果这个问题对社区没有任何价值,请随时投票关闭或删除它。