【发布时间】:2012-09-07 23:29:04
【问题描述】:
有人可以解释一下下面的 XAML 行吗?
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Here的简单使用示例。
如何用C# 代码替换该行?
【问题讨论】:
-
为什么会有两次“RelativeSource”?
标签: c# xaml data-binding datacontext
有人可以解释一下下面的 XAML 行吗?
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Here的简单使用示例。
如何用C# 代码替换该行?
【问题讨论】:
标签: c# xaml data-binding datacontext
这只是将DataContext 属性设置为等于具有该属性的对象。等效代码为this.DataContext = this;
编辑
DataContext 属性是用作此对象及其子对象上发生的所有绑定的上下文的对象。如果您没有将 DataContext 正确设置为要绑定到的模型,则所有绑定都将失败。
编辑2
下面是如何在后面的代码中设置它(与您的示例相匹配):
public partial class ListViewTest : Window
{
ObservableCollection<GameData> _GameCollection =
new ObservableCollection<GameData>();
public ListViewTest()
{
_GameCollection.Add(new GameData {
GameName = "World Of Warcraft",
Creator = "Blizzard",
Publisher = "Blizzard" });
_GameCollection.Add(new GameData {
GameName = "Halo",
Creator = "Bungie",
Publisher = "Microsoft" });
_GameCollection.Add(new GameData {
GameName = "Gears Of War",
Creator = "Epic",
Publisher = "Microsoft" });
InitializeComponent();
this.DataContext = this; //important part
}
public ObservableCollection<GameData> GameCollection
{ get { return _GameCollection; } }
private void AddRow_Click(object sender, RoutedEventArgs e)
{
_GameCollection.Add(new GameData {
GameName = "A New Game",
Creator = "A New Creator",
Publisher = "A New Publisher" });
}
}
【讨论】:
ObservableCollection,但绑定失败。
Window 类的 DataContext 属性设置为等于 Window 的实例
这意味着“DataContext 是此 DataContext 属性的所有者”,因此是控件。
在 C# 中是这样的
myTextBox.DataContext = myTextBox;
【讨论】:
回答你的第二个问题: 有时在 XAML 上声明 DataContext 可能很有用,因为您可以在设计时看到数据绑定。如果通过代码声明,数据绑定只会在运行时完成。
还有其他方法可以获取设计时(假)数据。如需了解更多,请查询“可弯曲性”。
注意:作为一般规则,请记住,如果您有其他问题,您应该创建一个新的 stackoverflow 请求 :-)
【讨论】: