C# WPF C-将枚举绑定到组合框
我有一个具有以下选项的组合框:硬删除、软删除、移动到删除项 我希望默认选择与EmailAction对象的以下属性匹配: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
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;
}