[英]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.