誰かが私に次のXAML行を説明できますか?
DataContext="{Binding RelativeSource={RelativeSource Self}}"
ここ 簡単な使用例。
その行をC#
コードに置き換える方法は?
これは、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" });
}
}
これは、「DataContextがこのDataContextプロパティの所有者である」という意味であり、したがってコントロールです。
C#では次のようになります
myTextBox.DataContext = myTextBox;
2番目の質問に答えるには:設計時にデータバインディングを確認できるため、XAMLでDataContextを宣言すると便利な場合があります。コードで宣言すると、データバインディングは実行時にのみ実行されます。
設計時(偽)データを実現する方法は他にもあります。詳細については、「曲げやすさ」についてお問い合わせください。
注:原則として、別の質問がある場合は、新しいスタックオーバーフローリクエストを作成する必要があることに注意してください:-)