我读了这篇文章http://msdn.microsoft.com/en-us/magazine/hh852595.aspx,试图了解WPF中的数据绑定。但它只涉及如何在代码中绑定数据上下文。
ContentPanel.DataContext = _currentPerson;
我有这个项目页面xaml。我不明白DataContext是如何设置的。 DataContext属性和d:DataContext属性有什么区别?
<Page
x:Class="Myapp.ItemPage"
DataContext="{Binding DefaultViewModel.Item, RelativeSource={RelativeSource Self}}"
d:DataContext="{Binding Groups[0].Items[0], Source={d:DesignData Source=../OneList.Shared/DataModel/SampleData.json, Type=data:SampleDataSource}}"
>
...
</Page>
答案 0 :(得分:2)
d:DataContext
用于设计时间。通过设置,您将能够看到Expression Blend等工具中出现的数据。
d
来自xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
,通常您还需要包含mc:Ignorable="d"
。
当您想要为面板指定设计时间宽度和高度时,它也很有用。例如,
d:DesignWidth =&#34; 1280&#34; d:DesignHeight =&#34; 812&#34;
答案 1 :(得分:1)
页面 DataContext
在此行设置:
DataContext="{Binding DefaultViewModel.Item, RelativeSource={RelativeSource Self}}"
ItemPage必须具有属性DefaultViewModel。因此,您将DataContext绑定到DefaultViewModel实例的Item属性。
通过RelativeSource Self,您要求绑定引擎在页面中查找属性DefaultViewModel。
此外,DataContext是可继承的Dependency Property,因此子元素将自动从其父页面继承DataContext。要解决任何绑定,WPF绑定引擎会在其DataContext中查找属性,除非您通过使用RelativeSource标记扩展明确要求它查找其他位置。
d:DataContext
仅用于设计模式,而 DataContext
用于解析绑定运行
使用d:DataContext,您可以提供虚拟DataContext,Designer View将使用它来为您提供页面的实际外观。 (用于设计时数据绑定)。