如何触发组合框项目源的重新加载

Posted

技术标签:

【中文标题】如何触发组合框项目源的重新加载【英文标题】:How to trigger reload of combobox itemsource 【发布时间】:2018-03-23 11:17:39 【问题描述】:

我有一个组合框,我正在将 XAML 中的组合框与 viewmodel 字典值绑定。

第一次加载页面时,我尝试从服务器下载字典值并将其设置为字典视图模型变量。

但是组合框看起来是空的,我不明白为什么会发生这种情况,因为 View Model 变量已经更新,这应该会触发组合框的重新加载,但这并没有发生..

仅供参考: 如果我硬编码字典而不是从服务器下载它,我看不到这个问题 当我第二次加载页面时,我没有看到这个问题

更新

XAML

<ComboBox x:Name=“testBox” Margin=“0,0,0,0” PlaceholderText="StaticResource testText” ItemsSource="Binding TestDictionary.Values” SelectedValue="Binding DictionaryValue, Mode=TwoWay" IsEnabled="Binding IsItLoading, Converter=StaticResource InverseBooleanConverter"/>

查看模型

       private Dictionary<string, string> testDictionary;


 public Dictionary<string, string> TestDictionary
        
            get
            
                if (this.testDictionary == null)
                
                    this.testDictionary = new Dictionary<string, string>();
                

                return this.testDictionary;
            

            set
            
                this.Set(() => this.TestDictionary, ref this.testDictionary, value);
            
        

【问题讨论】:

您能否发布您的ViewModelXAML 您如何将数据分配给Combobox? @AVK - 我已经更新了有问题的代码示例 【参考方案1】:

Dictionary 不会在添加、删除项目或刷新整个列表时提供通知。

当我们向Dictionary 添加新数据时,我们应该能够将null 设置为ComboBoxItemsSource。然后将ComboBoxTestDictionary.Values设置为ItemsSource

您也可以实现自己的ObservableDictionary。当Dictionary 更改时,ComboBox 将更改。 要实现ObservableDictionary,可以参考following question。

【讨论】:

以上是关于如何触发组合框项目源的重新加载的主要内容,如果未能解决你的问题,请参考以下文章

Datagridview 在更改列组合框值时执行代码

如何使组合框向上/向下键在 DroppedDown = True 时模拟鼠标

C#Reflection - 如何在运行时重新加载类?

以编程方式选择索引 0(从-1)时,组合框未触发 SelectedIndexChanged

如何按常用的组合框排序?

表单加载时停止触发组合框的 selectedIndexChanged 事件