[英]WPF C# - Binding Enum to ComboBox
我有一个 combobox 具有以下选项:“HardDelete”、“SoftDelete”、“MoveToDeletedItems”
我希望默认选择与 EmailAction object 的以下属性相匹配:
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>
目前 combobox 默认为空,因此无法按预期工作。 我可以使用“emailActionInstance.DeleteMode.ToString();” 在文本框中查看数据,所以看来我可能只是错误地设置了所选项目?
问题是设置 ComboBox.SelectedItem 不起作用,除非 ComboBox 包含您要设置的项目。 在您的情况下,您的 ComboBox 填充了三个 ComboBoxItem 对象,它们的 Content 属性设置为字符串。 所以 ComboBox.SelectedItem 是一个 ComboBoxItem。 您正在尝试将 ComboBox.SelectedItem 设置为字符串,该字符串不等于 ComboBox 中包含的任何对象。 因此,什么也没有发生。
我建议为您的 ComboBox 设置绑定,如下所示:
<ComboBox ItemsSource="{Binding DeleteModes}" SelectedItem="{Binding SelectedDeleteMode}" />
然后创建一个要绑定的 ViewModel。 如果将 Enum 绑定到 ComboBox,它将正确显示,因此您无需调用 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.