20

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

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

ここに簡単な使用例があります。

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

4

3 に答える 3

13

これは、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" });
    }
}
于 2012-09-14T19:15:01.170 に答える
2

これは、「DataContextがこのDataContextプロパティの所有者である」、つまりコントロールを意味します。

C#では

myTextBox.DataContext = myTextBox;
于 2012-09-14T19:15:27.123 に答える
0

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

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

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

于 2016-02-23T11:24:33.283 に答える