将Combobox Itemssource绑定到静态字典(Silverlight)

时间:2014-04-27 14:21:30

标签: silverlight xaml binding static

我正在尝试将我的ComboBox的ItemsSource绑定到静态类上的静态字典。

在WPF中,我会使用以下哪种方法可以正常工作:

ItemSource="{x:Static objectModel:LocaleHelper.FriendlyNames}"

LocaleHelper是类名,FriendlyNames是我想要绑定的字典属性。
但是在Silverlight中,我发现错误与x:Static未找到类型有关 任何人都可以向我解释问题是什么和解决方法吗? 我环顾四周但却找不到任何详细的解释 很抱歉,如果这是一个简单的问题 - 我是Silverlight的新手,也是WPF的新手。

编辑: 在完成更多阅读后,看起来Silverlight不支持静态资源。此外,字典似乎没有更新属性已更改/支持DisplayMemberPath& SelectedValue所以将字典作为我的viewmodel中的字段并不是一个选项。

2 个答案:

答案 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支持DisplayMemberPathSelectedValue。假设您要使用ComboBox选择Key并显示词典Value的{​​{1}}:

KeyValuePairs

答案 1 :(得分:0)

如果它只是绑定到集合的问题,那么您也可以在ViewModel的构造函数中执行此操作。进一步考虑使用ObservableCollection,以防静态集合随时间发生变化。