我是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”。 有没有办法做到这一点?
谢谢, 奥斯卡
答案 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。