DataContext和绑定self作为RelativeSource

时间:2012-09-14 19:13:27

标签: c# xaml data-binding datacontext

有人能解释一下以下的XAML专线吗?

DataContext="{Binding RelativeSource={RelativeSource Self}}"

Here简单的使用示例。

如何用C#代码替换该行?

3 个答案:

答案 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请求: - )