我正在尝试将我的ComboBox的ItemsSource绑定到静态类上的静态字典。
在WPF中,我会使用以下哪种方法可以正常工作:
ItemSource="{x:Static objectModel:LocaleHelper.FriendlyNames}"
LocaleHelper
是类名,FriendlyNames
是我想要绑定的字典属性。
但是在Silverlight中,我发现错误与x:Static
未找到类型有关
任何人都可以向我解释问题是什么和解决方法吗?
我环顾四周但却找不到任何详细的解释
很抱歉,如果这是一个简单的问题 - 我是Silverlight的新手,也是WPF的新手。
编辑:
在完成更多阅读后,看起来Silverlight不支持静态资源。此外,字典似乎没有更新属性已更改/支持DisplayMemberPath
& SelectedValue
所以将字典作为我的viewmodel中的字段并不是一个选项。
答案 0 :(得分:3)
您只能绑定到非静态公共属性(不是字段)。但是可以对这些属性使用任何“载体”(因此您不必在ViewModel中拥有这些属性)。我们看看......
<Resources>
<LocaleHelperWrapper x:Key="Wrapper"/>
</Resources>
<ComboBox ItemsSource="{Binding Path=FriendlyNames,
Source={StaticResource Wrapper}}"/>
包装代码:
public class LocaleHelperWrapper
{
public Dictionary<string, string> FriendlyNames
{
get { return LocaleHelper.FriendlyNames; }
}
}
[编辑] ComboBox
支持DisplayMemberPath
和SelectedValue
。假设您要使用ComboBox选择Key
并显示词典Value
的{{1}}:
KeyValuePairs
答案 1 :(得分:0)
如果它只是绑定到集合的问题,那么您也可以在ViewModel的构造函数中执行此操作。进一步考虑使用ObservableCollection,以防静态集合随时间发生变化。