WPF/Silverlight中的数据库以依赖属性、DataContext对象和DataSource对象为中心。据我所知,依赖属性与环境属性是一样的,它们对绑定的意义基本上是,如果您将一堆小部件放入容器中,那么只需要为容器指定一个DataContext。
这个问题有几个部分。
DataContext和DataSource之间的区别是什么,它们是如何联系的?在WPF/Silverlight数据库中管理游标的CurrencyManager和Cursor是否有直接的等价性?DataGrid似乎有一个CurrentItem属性。如果将一组小部件绑定到数据源的各个列,并且它们与datagrid共享相同的数据文本,则可以交互地移动数据集中选定的行,以更改其值在小部件中表示的行。有谁能给我解释一下这一切是怎么整合的吗?最好参考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部署到目标计算机的程序集。那我现在该怎么办?
发布于 2009-12-19 12:07:43
我找到了一些答案,所以如果没有其他人的有益贡献,我会回答我自己的问题。
DataContext是一种游标对象。向DataContext属性分配要绑定的对象的任何对象或IEnumerable集合,并围绕它构造一个包装器。如果分配IEnumerable,则DataContext将显示引用IEnumerable元素之一的CurrentItem属性。如果您分配了一些不是IEnumerable的东西,那么DataContext包装器的行为就好像它构造了一个IEnumerable,并将您的对象添加到集合中,然后继续成功,就好像这是您首先传递的一样,对象被设置为CurrentItem。
一个可能的IEnumerable是DomainDataSource,其中DataSource是一个基本clase。
Silverlight中的每个小部件都有一个DataContext属性。通常,您不会直接设置此属性,因为Microsoft将“依赖属性”称为“依赖属性”,据我所知,这些属性与环境属性完全相同,也就是说,除非您显式地设置它们,否则它们“继承”来自直接容器的值,而后者又可能继承。因此,您没有在一堆小部件上设置与DataContext相同的DataContext,而是让它们都是某个容器的子容器,并为此设置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中
https://stackoverflow.com/questions/1919247
复制相似问题