簡體   English   中英

WPF C# - 將枚舉綁定到 ComboBox

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM