WPF / Silverlight中的数据绑定围绕依赖项属性,DataContext
对象和DataSource
对象。据我所知,依赖属性与环境属性是相同的,它们对绑定的意义基本上是如果你把一堆小部件放在一个容器中,那么你只需要为容器指定一个DataContext
。
这个问题有几个部分。
DataContext
和DataSource
之间有什么区别?它们有何关联?CurrencyManager
和BindingContext
直接等效?Cursor
? DataGrid
似乎有CurrentItem
属性。如果将一组窗口小部件绑定到数据源的各个列,并且它们与数据网格共享相同的datacontext,则以交互方式移动数据网格中的选定行将更改其值在窗口小部件中表示的行。有人请向我解释它们是如何组合在一起的吗?优选地参考SL4。
当我这样做时:
private void buttonNew_Click(object sender, RoutedEventArgs e)
{
Guid newId = Guid.NewGuid();
Employee emp = new Employee() { Id = newId, FirstName = "NOT SET", LastName = "NOT SET" };
AtomDomainContext adc = employeeDomainDataSource.DomainContext as AtomDomainContext;
DomainDataSourceView ddsv = grid1.DataContext as DomainDataSourceView;
}
我收到此编译错误:
The type 'System.ComponentModel.IPagedCollectionView' is defined in an assembly
that is not referenced. You must add a reference to assembly 'System.Windows.Data,
Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
D:\Argent\Views\ManageEmployees.xaml.cs, 57, 7, Argent
听起来很容易修复但是当我尝试添加对Argent项目的引用时,引用列表为空;可能只有一个被限制在Silverlight部署到目标计算机的那些程序集中。那我现在该怎么办?
答案 0 :(得分:2)
我找到了一些答案,所以在没有其他人的有用贡献的情况下,我会回答我自己的问题。
DataContext是一种游标对象。您将DataContext属性分配给要绑定的任何对象或IEnumerable对象集合,并围绕它构造包装器。如果指定IEnumerable,DataContext将显示一个CurrentItem属性,该属性引用IEnumerable的一个元素。如果你指定的东西不是IEnumerable,那么DataContext包装器的行为就好像它构造了一个IEnumerable并将你的对象添加到集合中然后继续进行,就好像这是你首先传递的那个,对象被设置为CURRENTITEM。
一个可能的IEnumerable是DomainDataSource,DataSource是一个基础clase。
Silverlight中的每个小部件都有一个DataContext属性。通常你不直接设置它,因为微软已经采取了调用“依赖属性”的东西,据我所知,它与环境属性完全相同,也就是说,除非你明确地设置它们,否则它们“继承”来自直接容器的值,可以依次继承。因此,不要在一堆小部件上设置与DataContext相同的IEnumerable,而是将它们设置为某个容器的所有子容器并为其设置DataContext,并且它们奇迹般地绑定到同一个游标。
只需明确指定XAML即可在XAML中创建新的DataContext对象;这将创建一个新实例并将其分配给您指定它的窗口小部件的DataContext属性;这是一个新实例,一个独立于任何其他DataContext的新游标。
在Silverlight4中,您可以引用另一个对象使用的DataContext;看元素绑定。
但是绑定仅部分由DataContext指定。指定了一个DataContext,使得一个小部件的对象foo贡献了它的上下文,指定一个A的绑定路径将在对象foo上查找一个名为A的属性,如果找到它,则将它的值与小部件相关联。
对新手来说真正令人困惑的是,虽然整个绑定可以在一个地方指定,但通常上下文指定在一个大的复杂容器层次结构的数英里之外,并且只指定路径每个小部件,但是(例如)将组合框的ItemsSource绑定到查找表,您做指定整个事物。我希望我跟那些跟随我的脚步更加清楚。
至于难以捉摸的'System.Windows.Data'的位置,它位于%ProgramFiles%\ Microsoft SDKs \ Silverlight \ v4.0 \ Libraries \ Client \ System.Windows.Data.dll