que español databindings data c# wpf xaml

c# - español - ¿Qué significa DataContext="{Binding}"?



data binding que es (2)

Sin ver más de su código es difícil estar seguro, pero DataContext="{Binding}" es a menudo innecesario, ya que cualquier objeto en el contexto de enlace actual automáticamente tendrá su propiedad DataContext establecida al equivalente de {Binding} .

Recuerda:

  • Property="{Binding}" significa "establecer this.Property en el valor evaluado de this.DataContext "
  • Property="{Binding Path=SubProperty}" significa "establecer this.Property en el valor evaluado de this.DataContext.SubProperty "
  • etc

Esto significa que DataContext="{Binding}" significa "establecer this.DataContext al valor evaluado de this.DataContext ", que (en la mayoría de los casos) es redundante!

Estoy tratando de averiguar de dónde provienen los elementos de un HeaderedContentControl en un proyecto que no es mío. Aquí está el código:

<HeaderedContentControl Content="{Binding Path=Workspaces}" ContentTemplate="{StaticResource WorkspacesTemplate}" Header="Workspaces" Style="{StaticResource MainHCCStyle}" DataContext="{Binding}" // <--- this /> <DataTemplate x:Key="WorkspacesTemplate"> <TabControl IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" ItemTemplate="{StaticResource ClosableTabItemTemplate}" Margin="4" />

así que vamos a examinarlo:

  1. El atributo ContentTemplate describe cómo se muestran los elementos.
  2. WorkspacesTemplate establece el atributo de ItemsSource en {Binding}, lo que significa que está vinculado a su propiedad DataContext (DataContext de HeaderedContentControl)
  3. Así que miro el dataContext de HeaderedContentControl, pero también se describe como "{Binding}" ...

Qué significa eso?


{Binding} es algo así como el enlace ''this'' o el contexto de datos actual: asignado o heredado de los padres. Para una mejor comprensión, equivalente para {Binding} es {Binding .} O {Binding Path=.}