C# 绑定静态ObservableCollection的问题

C# 绑定静态ObservableCollection的问题,c#,wpf,data-binding,binding,C#,Wpf,Data Binding,Binding,我有一个类(用于测试的代码非常少),它包含一个静态的ObservableCollection,从其他地方填充: public class TestClass { public static ObservableCollection<int> TestCollection = new ObservableCollection<int>(); } 当我尝试以编程方式绑定时: list.ItemsSource = Containers.TestClass.TestCo

我有一个类(用于测试的代码非常少),它包含一个静态的
ObservableCollection
,从其他地方填充:

public class TestClass
{
    public static ObservableCollection<int> TestCollection = new ObservableCollection<int>();
}
当我尝试以编程方式绑定时:

list.ItemsSource = Containers.TestClass.TestCollection;
。。。效果很好。但是,当我尝试通过XAML执行绑定时:

<Window x:Class="app.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="clr-namespace:app.Containers"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <d:TestClass x:Key="dataSource"/>
    </Window.Resources>
    <Grid>
        <ListBox x:Name="list" ItemsSource="{Binding Source={StaticResource dataSource}, Path=TestCollection}"/>
    </Grid>
</Window>
…并使用路径

…什么也不会再次显示

另外,也不确定这是否重要,但当我使我的类成为静态时,我在XAML代码中得到一个错误,它说:

类型“TestClass”是抽象的,必须包含显式值

所以,这是不可能的


知道我如何通过XAML绑定该
可观察集合吗?

问题是您正在尝试查找实例对象上的静态属性

<ListBox ItemsSource="{Binding Source={StaticResource dataSource},
                               Path=TestCollection}"/>


还应被告知静态属性绑定一次。如果您在运行时更改实例,该实例将不会反映回UI。在您的情况下,您处理的是ObservableCollection,因此当您从集合中添加/删除项时,它将在UI上刷新,但在您重新初始化列表的情况下,更改不会反映回UI。如果您想更新UI,则必须引发
StaticPropertyChangedEvent
。如果有兴趣,请查看我的答案。

太棒了!我知道有一个XAML方法你太棒了。这
x:Static
成功了。很高兴能帮助mate.)@MonsterMMORPG-d是声明TestClass的命名空间。您需要在XAML的根目录下定义它,如下所示
xmlns:d=“clr namespace:app.Containers”
<Window.Resources>
    <l:LifeEngine x:Key="dataSource"/>
</Window.Resources>
<Window.DataContext>
    <Binding Source="{StaticResource dataSource}"/>
</Window.DataContext>
<ListBox ItemsSource="{Binding Source={StaticResource dataSource},
                               Path=TestCollection}"/>
<ListBox ItemsSource="{Binding Source={x:Static d:TestClass.TestCollection}}"/>