WPF ComboBox 绑定 Dictionary / Array 作为数据源

文章目录

    在用 .NET 6 WPF 开发一个自动化翻译的 Windows 客户端软件,需要增加一个下拉控件可以选择 Locale。

    WPF 中对应的组件时 ComboBox。与 listbox 的不同之处在于,combobox 是折叠收起的,而 listbox 的是展开显示的。

    combobox 贴心之处在于,除了能下拉选择,还能手动输入内容。

    CSharp 代码中绑定 dictionary / array

    尽管有几种方式可以实现数据的绑定,但是我还是喜欢在 CSharp 代码中绑定,因为比在 XAML 中清晰多了。

    注意:如果想在设计器里点来点去实现绑定,需要随时做好应对 VS IDE 卡死的状况。

    private Dictionary<string, string> locales = new Dictionary<string, string>
    {
        { "af", "afrikaans 南非荷兰语"},
        { "sq", "albanian 阿尔巴尼亚"},
        { "am", "amharic 阿姆哈拉语"},
        { "ar", "arabic 阿拉伯语"},
    }
    
    private string[] defaultLocales = { 
        "zh", "en"
    };
    
    
    public MainWindow()
    {
        InitializeComponent();
    
        // data binding to dictionary
        targetLocaleCB.ItemsSource = locales;
        targetLocaleCB.SelectedValuePath = "Key";
        targetLocaleCB.DisplayMemberPath = "Value";
    
        // // data binding to array
        defaultLocaleCBox.ItemsSource = defaultLocales;
        efaultLocaleCBox.SelectedIndex = 0;
    }
    

    当下拉选择数据后,获取新值

    无论是 dict 还是 array,获取方法都是一样的。

    defaultLocale = defaultLocaleCBox.SelectedValue.ToString();
    

    参考

    https://learn.microsoft.com/en-us/dotnet/desktop/wpf/data/?view=netdesktop-6.0

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式