如何触发组合框项目源的重新加载
How to trigger reload of combobox itemsource
我有一个组合框,我将 XAML 中的组合框与视图模型字典值绑定。
第一次加载页面时,我尝试从服务器下载字典值并将其设置为字典视图模型变量。
但是组合框看起来是空的我不明白为什么会发生这种情况,因为 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);
}
}
Dictionary
在添加、删除项目或刷新整个列表时不提供通知。
当我们向Dictionary
添加新数据时,我们应该能够将null
设置为ComboBox
的ItemsSource
。然后设置TestDictionary.Values
到ComboBox
的ItemsSource
。
您也可以实现自己的 ObservableDictionary
。当 Dictionary
改变时, ComboBox
也会改变。
要实现ObservableDictionary
,可以参考following question.
我有一个组合框,我将 XAML 中的组合框与视图模型字典值绑定。
第一次加载页面时,我尝试从服务器下载字典值并将其设置为字典视图模型变量。
但是组合框看起来是空的我不明白为什么会发生这种情况,因为 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);
}
}
Dictionary
在添加、删除项目或刷新整个列表时不提供通知。
当我们向Dictionary
添加新数据时,我们应该能够将null
设置为ComboBox
的ItemsSource
。然后设置TestDictionary.Values
到ComboBox
的ItemsSource
。
您也可以实现自己的 ObservableDictionary
。当 Dictionary
改变时, ComboBox
也会改变。
要实现ObservableDictionary
,可以参考following question.