我有一个使用MVVM模式的WPF应用程序,我有很多ObservableCollections。我没有将这些ObservableCollections放入每个ViewModel中,而是将它们放入一个名为Observables的静态类中,该类是静态类AppCommon的成员。所以我可以通过AppCommon.Observables.AnyObservableINeed访问所有可观察的集合。
现在我需要更改UserControl的绑定,以便它们绑定到这些全局的ObservableCollection,但我不知道如何在不改变DataContext的情况下引用这些ObservableCollections。
我尝试添加类似
的命名空间xmlns:globals="clr-namespace:Demirbaş.Globals"
然后在ListBox中设置ItemsSource属性,如
<ListBox ItemsSource="{Binding Source={globals:Observables.TaşınırSınıfları}}"
但这会给我以下错误:
'{globals:Observables.TaşınırSınıfları}' value is not a valid MarkupExtension expression. Cannot resolve 'Observables.TaşınırSınıfları' in namespace 'clr-namespace:Demirbaş.Globals'. 'Observables.TaşınırSınıfları' must be a subclass of MarkupExtension.
这是什么问题?我使用正确的XAML语法绑定到这些集合吗?
修改
ItemsSource="{Binding Source={x:Static globals:AppCommon.Observables.TaşınırSınıfları}}"
给了我错误:
Cannot find the type 'AppCommon.Observables'. Note that type names are case sensitive.
我认为它不能引用嵌套类,是不是?解决方案是什么?
由于
答案 0 :(得分:2)
您需要使用x:Static标记扩展名,例如评论中建议的LPL,告诉WPF它是一个静态对象
<ListBox ItemsSource="{Binding
Source={x:Static globals:Observables.TaşınırSınıfları}}" />
答案 1 :(得分:2)
我不知道您的应用程序的命名空间,但请尝试
xmlns:local="clr-namespace:Demirbaş"
<ListBox ItemsSource="{Binding
Source={x:Static local:AppCommon+Observables.TaşınırSınıfları}}" />
答案 2 :(得分:0)
当命名空间引用未完全限定且目标绑定存在于另一个程序集中时,也会发生此错误。
例如,xmlns:l="clr-namespace:AssemblyA.Namespace;assembly=AssemblyA".
如果未指定特定程序集,将显示相同的错误消息&#34; value不是有效的MarkupExtension表达式&#34;。