Cómo: Hacer que los datos estén disponibles para el enlace en XAML

En este tema se explican maneras diferentes de hacer que los datos estén disponibles para el enlace en Extensible Application Markup Language (XAML), dependiendo de las necesidades de la aplicación.

Ejemplo

Si tiene un objeto common language runtime (CLR) al que desea enlazar en XAML, una manera de hacer que esté disponible para el enlace es definirlo como recurso y asignarle una clave x:Key. En el ejemplo siguiente, tenemos un objeto Person con una propiedad de cadena denominada PersonName. El objeto Person se define en el espacio de nombres denominado SDKSample.

<Window
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:src="clr-namespace:SDKSample"
  SizeToContent="WidthAndHeight"
  Title="Simple Data Binding Sample">

  <Window.Resources>
    <src:Person x:Key="myDataSource" PersonName="Joe"/>


...


</Window.Resources>

A continuación, puede enlazar al objeto en XAML, como se muestra en el ejemplo siguiente.

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

Como alternativa, puede utilizar la clase ObjectDataProvider, como en el ejemplo siguiente.

<ObjectDataProvider x:Key="myDataSource" ObjectType="{x:Type src:Person}">
  <ObjectDataProvider.ConstructorParameters>
    <system:String>Joe</system:String>
  </ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>

El enlace se define de la misma manera:

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

En este ejemplo concreto, el resultado es el mismo: dispone de TextBlock con el contenido de texto Joe. Sin embargo, la clase ObjectDataProvider proporciona funcionalidad que permite enlazar al resultado de un método. Puede optar por utilizar la clase ObjectDataProvider si necesita la funcionalidad que proporciona.

Sin embargo, si el enlace se va a establecer a un objeto que ya se ha creado, deberá establecer DataContext mediante código, como en el ejemplo siguiente.

    Private myDataSet As DataSet

    Private Sub OnInit(ByVal sender As Object, ByVal e As EventArgs)
      Dim mdbFile As String = Path.Combine(AppDataPath, "BookData.mdb")
      Dim connString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile)
      Dim conn As New OleDbConnection(connString)
      Dim adapter As New OleDbDataAdapter("SELECT * FROM BookTable;", conn)

      myDataSet = New DataSet()
      adapter.Fill(myDataSet, "BookTable")

      ' myListBox is a ListBox control.
      ' Set the DataContext of the ListBox to myDataSet
      myListBox.DataContext = myDataSet
    End Sub
DataSet myDataSet;

private void OnInit(object sender, EventArgs e)
{
  string mdbFile = Path.Combine(AppDataPath, "BookData.mdb");
  string connString = string.Format(
      "Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile);
  OleDbConnection conn = new OleDbConnection(connString);
  OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM BookTable;", conn);

  myDataSet = new DataSet();
  adapter.Fill(myDataSet, "BookTable");

  // myListBox is a ListBox control.
  // Set the DataContext of the ListBox to myDataSet
  myListBox.DataContext = myDataSet;
}

Para tener acceso a los datos de XML para el enlace a través de la clase XmlDataProvider, vea Cómo: Enlazar a datos XML mediante XMLDataProvider y consultas XPath. Para tener acceso a los datos de XML para el enlace a través de la clase ObjectDataProvider, vea Cómo: Enlazar a los resultados de una consulta LINQ for XML, XDocument o XElement.

Para obtener información sobre las distintas maneras de especificar los datos a los que se establece el enlace, consulte Cómo: Especificar el origen de enlace. Para obtener información sobre qué tipos de datos se pueden enlazar o sobre cómo implementar sus propios objetos common language runtime (CLR) para el enlace, consulte Información general sobre orígenes de enlaces.

Vea también

Conceptos

Información general sobre el enlace de datos

Otros recursos

Temas "Cómo..." sobre enlace de datos