“ItemsSource = {Binding}”是什么意思?

39

我试图通过解开一个前任写的非常混乱的项目来学习WPF。如果我的问题有些像作业水平,那我很抱歉,因为我正试图理解现有XAML的作用,但对其背后的概念了解不足...

无论如何,我有一个ListView,它的定义中包含以下内容:

<ListView 
    DataContext="{StaticResource XMLFileGroups}"
    ItemContainerStyle="{StaticResource XMLItemStyle}"
    ItemsSource="{Binding}">

现在,我大致可以理解"DataContext"和"ItemContainerStyle"是在做什么;它们似乎分别引用了对现有列表进行排序的某种方法和定义ListView一些可视行为的结构。

让我困扰的是ItemsSource被列为"{Binding}"。所有这句话告诉我就是有某种数据绑定存在,但我不明白这行代码如何具有意义,而且如果删除它,任何数据都无法显示。

有人能解释一下这里发生了什么,或者我应该在哪里寻找实际的绑定定义吗?我只是不理解我看到的东西。

2个回答

39
没有路径,{Binding}会绑定到DataContext本身。
添加路径将绑定到数据上下文的属性。

所以"{Binding}"特别链接回由ListView的DataContext属性创建的集合?这是一般发生在View类型对象上的还是ListView特定的?对于乞求更多信息我感到抱歉,但我相信您能理解搜索“ItemsSource = {Binding}”不够精确,因此我首先要问这个问题... - Frosty840
我不确定你在问什么。{Binding} 可以在任何上下文中使用,其中您想要绑定的值是 DataContext 本身。它最常用于绑定数据源。 - SLaks
我本以为是这样,但我并不能确定。感谢您的澄清。 - Frosty840

8

该示例指定绑定的DataContext。在代码后台中,相同的事情将是

MyList.ItemsSource = new Binding();

您还可以进行以下操作:

ItemsSource="{Binding YourBindingField, Source={StaticResource YourStaticDataSource}}"

这将在代码中翻译为:
        MyList.ItemsSource = new Binding() {ElementName = "YourBindingField", Source = YourStaticDataSource};

希望能对您有所帮助。

1
抱歉,我之前没有提到我正在处理的是(理论上)一个MVVM项目,所以没有任何代码后台。虽然我相信你说的是正确的,但我没有任何上下文来解释它。 - Frosty840

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接