Parece que cada vez que leo un artículo sobre "cómo hacer el enlace de datos WPF", se hace con una variación diferente, a veces con DataContext, a veces sin, a veces con Itemssource o ambos Itemssource y DataContext, también hay ObjectDataProvider, y puede tener cualquiera de estos en XAML o codebehind, o sin código subyacente y enlazar directamente desde XAML a sus ViewModels.¿Alguien sabe de una colección exhaustiva de ejemplos de enlaces de datos de WPF?
Parece que hay docenas de diferentes sintaxis para utilizar dentro del propio XAML, por ejemplo:
<ListBox ItemsSource="{Binding Source={StaticResource Customers}}">
y
<ListBox DataContext="{StaticResource Customers}" ItemsSource="{Binding}">
Estos dos ejemplos de código, por ejemplo, hacen lo mismo:
1. Usando ObjectDataProvider sin código subyacente:
<Window x:Class="TestDataTemplate124.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestDataTemplate124"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<ObjectDataProvider x:Key="Customers"
ObjectType="{x:Type local:Customer}"
MethodName="GetAllCustomers"/>
</Window.Resources>
<StackPanel>
<ListBox DataContext="{StaticResource Customers}" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding LastName}"/>
<TextBlock Text=" ("/>
<TextBlock Text="{Binding Age}"/>
<TextBlock Text=")"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Window>
2. Ejemplo sin DataContext:
<Window x:Class="TestDataTemplate123.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestDataTemplate123"
Title="Window1" Height="300" Width="300">
<StackPanel>
<ListBox x:Name="ListBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding LastName}"/>
<TextBlock Text=" ("/>
<TextBlock Text="{Binding Age}"/>
<TextBlock Text=")"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Window>
using System.Collections.ObjectModel;
using System.Windows;
namespace TestDataTemplate123
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
ListBox1.ItemsSource = Customer.GetAllCustomers();
}
}
}
¿Alguien sabe de una fuente que explica WPF enlace de datos por vez de decir "aquí es cómo lo haces de enlace de datos" y luego explicar una manera particular, pero en su lugar, intente explicar las diversas formas de realizar el enlace de datos y mostrar quizás cuáles son las ventajas y desventajas de de, por ejemplo tener DataContext o no, vinculando en XAML o código subyacente, etc.?