WPF绑定路径= /无法工作?

4

我已经按照以下方式设置了我的DataContext

<Window.DataContext>
    <c:DownloadManager />
</Window.DataContext>

在这里,DownloadManager 是一个 Enumerable<DownloadItem>。然后我像这样设置了我的 DataGrid:

<DataGrid Name="dataGrid1" ItemsSource="{Binding Path=/}" ...

所以它应该列出所有的DownloadItems,对吧?那么我应该能够设置我的列,比如:
<DataGridTextColumn Binding="{Binding Path=Uri, Mode=OneWay}"

UriDownloadItem的一个属性。但是它似乎不喜欢这个。在可视化属性编辑器中,它无法识别Uri作为有效属性,所以我猜我做错了什么。

之前它是可以工作的,当我将数据网格绑定到Values时,但后来我将可枚举对象从DownloadManager中取出并使其本身可枚举。我该怎么解决这个问题?

PS:通过“不起作用”,我的意思是它没有列出任何项目。我已经在DM的构造函数中添加了一些内容,所以它不应该为空。


1
Path=/ 尝试查找名为 /DownloadManager 属性 - 这永远不会是正确的。(如果它是一个 XmlDataSource,你可以使用 XPath=/,但那是另外一个故事...) - Dan Puzey
@Dan:啊..我只是从属性编辑器中选择了“当前项目”,然后它就给了我这个。 - mpen
@Dan - Path=/ 将绑定到 DataContext 中的当前项(当 DataContext 是一个集合时)。这是我经常用来参考绑定路径的好资源:http://www.nbdtech.com/Blog/archive/2009/02/02/wpf-xaml-data-binding-cheat-sheet.aspx - Metro Smurf
@Metro:那为什么{Binding}可以工作,但{Binding Path=/}不能工作呢? - mpen
参见我提供的附注答案。 - Metro Smurf
3个回答

8
尝试使用ItemsSource="{Binding}"。这应该足够了。

太棒了!像魔法一样顺利运行。 - mpen
1
或者 ItemsSource="{Binding Path=.}"。两者都能完成相同的工作。 - Amsakanna

6
作为对问题“为什么{Binding}可行,但{Binding Path=/}不可行”的回应,我将添加以下信息作为答案以澄清差异。
以下内容摘自MSDN数据绑定概述>绑定到集合

当前项目指针

视图还支持当前项目的概念。您可以浏览集合视图中的对象。在导航时,您正在移动一个项目指针,该指针允许您检索位于集合中特定位置的对象。有关示例,请参见如何:在数据CollectionView中导航对象

因为WPF仅使用视图(您指定的视图或集合的默认视图)绑定到集合,所以所有绑定到集合的绑定都有当前项目指针。当绑定到视图时,Path值中的斜杠("/")字符表示视图的当前项目。在以下示例中,数据上下文是集合视图。第一行绑定到集合。第二行绑定到集合中的当前项目。第三行绑定到集合中当前项目的Description属性。

<Button Content="{Binding }" />
<Button Content="{Binding Path=/}" />
<Button Content="{Binding Path=/Description}" />

哦……好的。现在我明白了。当前项!= DataContext。它是DataContext中的第一项。 - mpen

-1
作为 Danko 回答的替代方案,我发现了静态资源!(我是 WPF 新手)
<Window x:Class="ImageGetGUI.MainWindow"
    ...
    <Window.Resources>
        <c:DownloadManager x:Key="dm"/>
    </Window.Resources>
    ...
    <DataGrid Name="dataGrid1" ItemsSource="{StaticResource dm}" ...

您还可以为Window.DataContext命名,例如: <Window.DataContext> <c:DownloadManager x:Name="dm" /> </Window.DataContext> 这将允许您在需要时通过名称在代码后台访问DataContext。您可能还想查看ObjectDataProvider;我发现将它们放置在应用程序的资源字典中非常有帮助。例如,当您有一个在多个视图上重复使用的集合时,例如 List<US States> - Metro Smurf

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