DataContext и привязка себя как RelativeSource

Может ли кто-нибудь объяснить мне следующую строку XAML?

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

Здесь простой пример использования.

Как заменить эту строку кодом C#?

Ответы

Ответ 1

Это просто устанавливает свойство DataContext, равное объекту со свойством. Эквивалент кода был бы this.DataContext = this;

Edit

Свойством 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" });
    }
}

Ответ 2

Это означает, что "DataContext является владельцем этого свойства DataContext", таким образом, элемент управления.

В С# это будет

myTextBox.DataContext = myTextBox;

Ответ 3

Чтобы ответить на второй вопрос: Иногда может быть полезно объявить DataContext на XAML, потому что вы можете видеть привязку данных во время разработки. Если вы объявите его по коду, привязка данных будет выполняться только во время выполнения.

Существуют другие способы достижения времени разработки (поддельные). Чтобы узнать больше, пожалуйста, спросите о "гибкости".

Примечание. Как правило, помните, что если у вас есть другой вопрос, вы должны создать новый запрос stackoverflow: -)