Es scheint, dass jedes Mal, wenn ich einen Artikel über "wie WPF-Datenbindung zu tun" lesen, es mit einigen verschiedenen Variationen getan wird, manchmal mit DataContext, manchmal ohne, manchmal mit Itemssource oder Itemssource und DataContext, gibt es auch ObjectDataProvider, und Sie können jede dieser in XAML oder Codebehind oder keine Codebehind und binden direkt von XAML zu Ihrem ViewModels.
Es scheint, als gäbe es Dutzende von verschiedenen Syntaxen, die in der XAML selbst verwendet werden können, z.B.:
<ListBox ItemsSource="{Binding Source={StaticResource Customers}}">
et
<ListBox DataContext="{StaticResource Customers}" ItemsSource="{Binding}">
Diese beiden Code-Beispiele zum Beispiel tun dasselbe:
1. Verwendung von ObjectDataProvider ohne 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. Beispiel ohne 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();
}
}
}
Kennt jemand eine Quelle, die WPF Databinding erklärt, indem statt nur sagen, "hier ist, wie Sie Databinding" tun und dann eine bestimmte Art und Weise zu erklären, aber stattdessen versuchen, die verschiedenen Möglichkeiten der Datenbindung zu erläutern und eventuell die Vor- und Nachteile aufzuzeigen z.B. DataContext oder nicht, Bindung in XAML oder Code-Behind, usw.?