gpt4 book ai didi

c# - 如何从字符串转换回枚举

转载 作者:行者123 更新时间:2023-11-30 22:14:32 25 4
gpt4 key购买 nike

我有一个类,它由目标的属性信息(如类型和值)组成。我正在使用此 UI 以图形格式显示 View 中的所有类型,例如带有组合框的 Enum 和带有复选框的 bool 值。一切对我来说都很好,除了我在 UI 中更改组合框值的情况,它在 viewmodel 中不会改变。每次我更改值在组合框中,它在我的转换器中调用 convertback 方法。我需要将此字符串转换为枚举类型,我可以轻松地为特定枚举类型编写 convertback 代码,但是如何使用此转换器转换所有其他枚举,我有以下信息输入我可以传递给转换器的 PropertyType 属性并使用它,但我不知道该怎么做。

这是我的 UI 代码(只有相关部分)

    <!-- Default DataTemplate -->
<DataTemplate x:Key="DefaultDataTemplate">
<Grid Margin="4" MinHeight="25">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Key" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
<TextBox Margin="8,0" Grid.Column="1" Text="{Binding Value}" />
</Grid>
</DataTemplate>

<!-- DataTemplate for Booleans -->
<DataTemplate x:Key="BooleanDataTemplate">
<Grid Margin="4" MinHeight="25">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Key" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
<CheckBox Margin="8,0" Grid.Column="1" IsChecked="{Binding Value}" />
</Grid>
</DataTemplate>



<!-- DataTemplate for Enums -->
<DataTemplate x:Key="EnumDataTemplate">
<Grid Margin="4" MinHeight="25">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Key" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
<ComboBox Margin="8,0" SelectedItem="{Binding Value,Converter={StaticResource EnumToStringConverter},Mode=TwoWay}"
ItemsSource="{Binding PropertyType,
Converter={local:EnumToListConverter}}" Grid.Column="1"
HorizontalAlignment="Stretch" />
</Grid>
</DataTemplate>

<!-- DataTemplate Selector -->
<local:PropertyDataTemplateSelector x:Key="templateSelector"
DefaultnDataTemplate="{StaticResource DefaultDataTemplate}"
BooleanDataTemplate="{StaticResource BooleanDataTemplate}"
EnumDataTemplate="{StaticResource EnumDataTemplate}"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<ListView Grid.Row="0" ItemsSource="{Binding Model,Converter={StaticResource PropConverter}, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}" Grid.IsSharedSizeScope="True"
HorizontalContentAlignment="Stretch"
ItemTemplateSelector="{StaticResource templateSelector}"
/>

还有我的转换器和 View 模型

  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{

string EnumString;
try
{
EnumString = Enum.GetName((value.GetType()), value);
return EnumString;
}
catch
{
return string.Empty;
}
}



public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
return null;
//What to do here
}

查看模型

public class PropertyValue
{
private PropertyInfo propertyInfo;
private object baseObject;

public PropertyValue(PropertyInfo propertyInfo, object baseObject)
{
this.propertyInfo = propertyInfo;
this.baseObject = baseObject;
}

public string Name
{
get { return propertyInfo.Name; }

}

public Type PropertyType { get { return propertyInfo.PropertyType; } }

public object Value
{
get { return propertyInfo.GetValue(baseObject, null); }
set
{

propertyInfo.SetValue(baseObject, value , null);


}
}



}

最佳答案

尝试

return (targetType)Enum.Parse(typeof(targetType), value.ToString());

关于c# - 如何从字符串转换回枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18457158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com