You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF MVVM模式下ComboBox绑定数据源不显示选项问题

问题根因

ComboBox不显示选项是两个WPF绑定/视图映射的典型错误导致的:

  1. AccountView硬声明了独立DataContext,覆盖了传入的带数据的ViewModel实例
    你在MainWindow中通过ContentControl绑定CurrentViewModel,传入的是登录逻辑中构造的、已经加载了Binance、Bitrue两个交易所数据的AccountViewModel实例。但你在AccountView的XAML中显式写了如下代码:
<UserControl.DataContext>
    <views:AccountViewModel/>
</UserControl.DataContext>

这段代码会让AccountView自行初始化一个空参数构造的AccountViewModel作为数据上下文,这个空实例的AvaliableExchanges属性是null,ComboBox绑定自然拿不到任何数据。
2. 未配置ViewModel到View的隐式映射模板
你没有给ContentControl配置数据模板,WPF无法识别CurrentViewModel的AccountViewModel类型应该对应加载AccountView,默认只会调用ViewModel的ToString()方法渲染文本,根本不会加载你写的AccountView界面。

修复步骤
  • 直接删除AccountView中上述显式声明UserControl.DataContext的全部代码,UserControl不要硬编码自身的DataContext,应当继承父容器传递的上下文。
  • 在MainWindow的XAML中添加Window.Resources节点,配置ViewModel到View的隐式数据模板,让WPF自动完成视图映射:
<Window.Resources>
    <DataTemplate DataType="{x:Type vm:AccountViewModel}">
        <views:AccountView/>
    </DataTemplate>
</Window.Resources>

你已经在MainWindow中声明了vm对应ViewModels命名空间、views对应Views命名空间,直接添加上述代码即可,不需要额外引包。

修复后运行逻辑
  1. 点击登录按钮后,MainWindowViewModel从数据库拉取用户对应的交易所数据,构造带数据的AccountViewModel实例赋值给CurrentViewModel
  2. ContentControl检测到绑定的Content是AccountViewModel类型,自动匹配数据模板加载AccountView控件
  3. AccountView直接继承ContentControl传递的DataContext,也就是带数据的AccountViewModel实例,ComboBox的ItemsSource绑定可以正确读取到AvaliableExchanges集合的两个值,下拉选项正常显示。

注:你代码中属性名AvaliableExchanges存在拼写错误(正确拼写为AvailableExchanges),但只要绑定路径和属性名拼写完全一致就不会影响功能,可自行决定是否修正。

内容的提问来源于stack exchange,提问作者Александр

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:36:13