Sembra che ogni volta che leggo un articolo su "come eseguire il binding dei dati WPF", è fatto con qualche variazione diversa, a volte con DataContext, a volte senza, a volte con Itemssource o sia Itemssource che DataContext, c'è anche ObjectDataProvider e puoi avere uno di questi in XAML o codebehind, o codebehind e collegarli direttamente da XAML a ViewModels.Qualcuno sa di una raccolta esauriente di esempi di associazione dati WPF?
Sembra che ci sono decine di differenti sintassi da utilizzare all'interno del XAML stesso, ad esempio:
<ListBox ItemsSource="{Binding Source={StaticResource Customers}}">
e
<ListBox DataContext="{StaticResource Customers}" ItemsSource="{Binding}">
Questi due esempi di codice, ad esempio, fanno la stessa cosa:
1. Utilizzando ObjectDataProvider senza code-behind:
<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. Esempio senza 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();
}
}
}
Qualcuno sa di una fonte che spiega WPF Databinding da invece di dire "ecco come si fa l'associazione dati" e poi spiegare in un modo particolare, ma, invece, provare a spiegare i vari modi per fare il databinding e mostrare forse quali sono i vantaggi e gli svantaggi di es. avendo DataContext o no, vincolante in XAML o code-behind, ecc.?