C# WPF C-将枚举绑定到组合框

C# WPF C-将枚举绑定到组合框,c#,wpf,enums,combobox,binding,C#,Wpf,Enums,Combobox,Binding,我有一个具有以下选项的组合框:硬删除、软删除、移动到删除项 我希望默认选择与EmailAction对象的以下属性匹配: public DeleteMode DeleteMode { get; set; } 下面是我用来设置此设置的代码行: cmboDelMode.SelectedItem = emailActionInstance.DeleteMode.ToString(); 相关XAML: <ComboBox x:Name="cmboDelMode" HorizontalAlignm

我有一个具有以下选项的组合框:硬删除、软删除、移动到删除项

我希望默认选择与EmailAction对象的以下属性匹配:

public DeleteMode DeleteMode { get; set; }
下面是我用来设置此设置的代码行:

cmboDelMode.SelectedItem = emailActionInstance.DeleteMode.ToString();
相关XAML:

<ComboBox x:Name="cmboDelMode" HorizontalAlignment="Left" Margin="149,218,0,0" VerticalAlignment="Top" Width="120">
    <ComboBoxItem Content="HardDelete" HorizontalAlignment="Left" Width="118"/>
    <ComboBoxItem Content="SoftDelete" HorizontalAlignment="Left" Width="118"/>
    <ComboBoxItem Content="MoveToDeletedItems" HorizontalAlignment="Left" Width="118"/>
</ComboBox>

当前,组合框默认为空,因此无法按预期工作。我能够使用emailActionInstance.DeleteMode.ToString;要查看文本框中的数据,我可能只是设置了所选项目不正确?

问题是设置ComboBox.SelectedItem不起作用,除非ComboBox包含您要设置的项目。在您的案例中,ComboBox由三个ComboBoxItem对象填充,这些对象的内容属性设置为字符串。所以ComboBox.SelectedItem是一个ComboBoxItem。您正在尝试将ComboBox.SelectedItem设置为字符串,该字符串将不等于ComboBox中包含的任何对象。因此,什么也没有发生

我建议为您的组合框设置如下绑定:

<ComboBox ItemsSource="{Binding DeleteModes}" SelectedItem="{Binding SelectedDeleteMode}"  />
然后创建要绑定到的ViewModel。如果将枚举绑定到组合框,它将正确显示,因此无需调用DeleteMode.ToString:

public class ViewModel : INotifyPropertyChanged
{
    public ViewModel()
    {
        DeleteModes = new ObservableCollection<DeleteMode>
        { DeleteMode.HardDelete, DeleteMode.SoftDelete,
          DeleteMode.MoveToDeletedItems };
    }

    public event PropertyChangedEventHandler PropertyChanged;

    DeleteMode _selected_delete_mode;
    public DeleteMode SelectedDeleteMode {
        get { return _selected_delete_mode; }
        set {
            _selected_delete_mode = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("SelectedDeleteMode"));
        }
    }

    ObservableCollection<DeleteMode> _delete_modes;
    public ObservableCollection<DeleteMode> DeleteModes {
        get { return _delete_modes; }
        set {
            _delete_modes = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("DeleteModes"));
        }
    }

    public void update_mode(DeleteMode mode) => SelectedDeleteMode = mode;
}