以声明方式在列表框中设置DataContext

时间:2010-12-26 21:51:36

标签: .net silverlight data-binding windows-phone-7

我是Silverlight数据绑定主题的新手。我开始明白这种声明性的数据绑定方式有多酷。 要尝试一下,我在Page.xaml中有这个列表框:

<ListBox Height="100" Name="lbCategories" Width="236" HorizontalAlignment="Left" Margin="20,0,0,0" SelectionMode="Multiple" ItemsSource="{Binding Categories}" DisplayMemberPath="Name" />

在我的Page.xaml.cs中,我有一个名为类别ObservableCollection的公共属性。

如果我的CS文件中存在以下行:

DataContext = this;

但我想避免任何编程数据绑定。我想声明性地在我的ListBox元素中将DataContext设置为“this”。 有没有办法做到这一点?

谢谢, 奥斯卡

2 个答案:

答案 0 :(得分:3)

您尝试替换的程序代码是:

DataContext = this;

表示您正在尝试将ListBox的DataContext设置为UI元素,而不是DataContext的正常使用方式。如果您有UI元素公开的属性,则根本不需要使用DataContext,只需直接绑定到元素即可。所以而不是:

ItemsSource="{Binding Categories}"

使用:

ItemsSource="{Binding Categories, ElementName=mainWindow}"

其中mainWindow是上面“this”引用的元素的名称,并且不设置DataContext。

如果出于某种原因你确实想以这种方式使用DataContext,你可以在ListBox上使用这个属性:

DataContext="{Binding ElementName=mainWindow}"

将DataContext设置为与代码隐藏文件对应的元素。

答案 1 :(得分:1)

将其绑定到您在XAML中定义的静态资源,如this example