如何在WPF中设置数据绑定

时间:2014-10-03 06:12:44

标签: c# wpf

我读了这篇文章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>

2 个答案:

答案 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将使用它来为您提供页面的实际外观。 (用于设计时数据绑定)。