有人能解释一下以下的XAML专线吗?
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Here简单的使用示例。
如何用C#
代码替换该行?
答案 0 :(得分:12)
这只是将DataContext
属性设置为等于具有该属性的对象。等效代码为this.DataContext = this;
修改强>
DataContext
属性是用作此对象及其子对象上发生的所有绑定的上下文的对象。如果没有为要绑定的模型正确设置DataContext
,则所有绑定都将失败。
<强> EDIT2 强>
以下是如何在代码中设置它(匹配您的示例):
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" });
}
}
答案 1 :(得分:2)
这意味着“DataContext是此DataContext属性的所有者”,因此是控件。
在C#中它将是
myTextBox.DataContext = myTextBox;
答案 2 :(得分:0)
回答你的第二个问题: 有时在XAML上声明DataContext会很有用,因为您可以在设计时看到数据绑定。如果通过代码声明它,数据绑定将仅在运行时完成。
还有其他方法可以实现设计时(假)数据。要了解更多信息,请查询“可弯曲性”。
注意:作为一般规则,请记住,如果您有其他问题,则应创建新的stackoverflow请求: - )