c# - example - DataContext y self de enlace como RelativeSource
datacontext wpf xaml (3)
¿Alguien me puede explicar la siguiente línea XAML?
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Here el ejemplo simple de uso.
¿Cómo reemplazar esa línea con un código C#
?
Eso simplemente establece la propiedad DataContext
igual al objeto con la propiedad. El código equivalente sería this.DataContext = this;
Editar
La propiedad DataContext
es el objeto que se utiliza como contexto para todos los enlaces que se producen en este objeto y sus objetos secundarios. Si no tiene un DataContext
configurado correctamente en el modelo al que desea enlazar, todos sus enlaces fallarán.
Edit2
Aquí es cómo configurarlo en el código detrás (que coincide con su ejemplo):
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" });
}
}
Para responder a su segunda pregunta: en algún momento puede ser útil declarar DataContext en XAML porque puede ver el enlace de datos en el momento del diseño. Si lo declara por código, el enlace de datos se realizará solo en tiempo de ejecución.
Hay otras formas de lograr datos de tiempo de diseño (falsos). Para obtener más información, consulte sobre "bendabilidad".
Nota: como regla general, recuerde que si tiene otra pregunta, debe crear una nueva solicitud de :-)
Significa que "DataContext es el propietario de esta propiedad DataContext", por lo tanto, el control.
En C # sería
myTextBox.DataContext = myTextBox;