2

我有一个使用 MVVM 模式的 WPF 应用程序,其中有许多 ObservableCollections。我没有将这些 ObservableCollections 放入每个 ViewModel 中,而是将它们放入一个名为 Observables 的静态类中,它是静态类 AppCommon 的成员。所以我可以通过 AppCommon.Observables.AnyObservableINeed 访问所有的 observable 集合。

现在我需要更改 UserControl 的绑定,以便它们绑定到这些全局 ObservableCollection,但我不知道如何在不更改 DataContext 的情况下引用这些 ObservableCollection。

我尝试添加命名空间

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.

我认为它不能引用嵌套类,对吗?解决方案是什么?

谢谢

4

3 回答 3

2

您需要使用注释中建议的 LPL 之类的x:Static标记扩展来告诉 WPF 它是一个静态对象

<ListBox ItemsSource="{Binding 
    Source={x:Static globals:Observables.TaşınırSınıfları}}" />
于 2012-04-26T16:02:46.127 回答
2

我不知道您的应用程序的名称空间,但请尝试

xmlns:local="clr-namespace:Demirbaş"

<ListBox ItemsSource="{Binding 
    Source={x:Static local:AppCommon+Observables.TaşınırSınıfları}}" />
于 2012-04-27T08:06:49.060 回答
0

当命名空间引用不是完全限定的并且目标绑定存在于另一个程序集中时,也会发生此错误。

例如,xmlns:l="clr-namespace:AssemblyA.Namespace;assembly=AssemblyA".

如果未指定特定程序集,则会显示相同的错误消息“value is not a valid MarkupExtension expression”。

于 2014-05-28T03:46:57.690 回答