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

更新日期: 2022-10-20 阅读次数: 313 字数: 303 分类: Windows

在用 .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

tags: wpf

爱评论不评论