如何在 wpf 的组合框中将枚举值设置为 selectedItem

NoN*_*ded 4 c# wpf enums xaml combobox

好吧,我在这里发现了很多关于此的问题,但所有这些对我来说似乎都是古老而复杂的。

我有一个组合框,它绑定到视图模型类。

class SettingsViewModel
{
    public PictureRecognitionIntensivity PictureRecognitionIntensivity { get; set; }

    public Array PictureRecognitionIntensivityValues
    {
        get { return PictureRecognitionIntensivity.GetValues(typeof(PictureRecognitionIntensivity)); }
    }

    public SettingsViewModel()
    {
        // Set default values for testing;
        this.PictureRecognitionIntensivity = PictureRecognitionIntensivity.Moderate;
    }


}
Run Code Online (Sandbox Code Playgroud)

XAML部分:

<ComboBox SelectedItem="{Binding Path=PictureRecognitionIntensivity}" ItemsSource="{Binding Path=GetPictureRecognitionIntensivityValues}" />
Run Code Online (Sandbox Code Playgroud)

此代码正确地将值加载到组合框中,并且当选择更改时,值会更改为所选项目,因此它可以正常工作,但它不会将初始状态加载到组合框中。(一开始是空的。)

我在某个地方看到 Enum.GetValues 返回一个字符串,所以我尝试将其转换为如下字符串:

return this.PictureRecognitionIntensivity.toString();
Run Code Online (Sandbox Code Playgroud)

但它也不起作用。我的问题是将枚举实例添加到组合框并为其设置 selectedItem 的简单方法是什么。

小智 5

我对给定枚举建议的最简单方法

public enum PictureRecognitionIntensivity
{
    FIRST,
    SECOND,
    THIRD,
    FORTH,
} 
Run Code Online (Sandbox Code Playgroud)

在视图资源中声明静态实例如下

    <Window.Resources>
      <ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
         <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="local:PictureRecognitionIntensivity"/>
         </ObjectDataProvider.MethodParameters>
      </ObjectDataProvider>
   </Window.Resources>
Run Code Online (Sandbox Code Playgroud)

然后在您的 ComboBox 中将其绑定如下:

<ComboBox ItemsSource="{Binding Source={StaticResource dataFromEnum}}" SelectedItem="{Binding intensity }"/>
Run Code Online (Sandbox Code Playgroud)

然后设置初始枚举值应该按您的预期工作。