web-dev-qa-db-ja.com

DataContextとRelativeSourceとしての自己のバインド

誰かが私に次のXAML行を説明できますか?

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

ここ 簡単な使用例。

その行をC#コードに置き換える方法は?

17
gliderkite

これは、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" });
    }
}
12
Dylan Meador

これは、「DataContextがこのDataContextプロパティの所有者である」という意味であり、したがってコントロールです。

C#では次のようになります

myTextBox.DataContext = myTextBox;
2
dowhilefor

2番目の質問に答えるには:設計時にデータバインディングを確認できるため、XAMLでDataContextを宣言すると便利な場合があります。コードで宣言すると、データバインディングは実行時にのみ実行されます。

設計時(偽)データを実現する方法は他にもあります。詳細については、「曲げやすさ」についてお問い合わせください。

注:原則として、別の質問がある場合は、新しいスタックオーバーフローリクエストを作成する必要があることに注意してください:-)

0