似乎每次我阅读一篇关于“如何进行WPF数据绑定”的文章时,都会使用一些不同的变体,有时使用DataContext,有时没有,有时使用Itemssource或同时使用Itemssource和DataContext,还有ObjectDataProvider,并且您可以在XAML或代码隐藏中使用任何这些,或者不使用代码隐藏,并直接从XAML绑定到您的ViewModel。
似乎在XAML本身中有许多不同的语法,例如:
<ListBox ItemsSource="{Binding Source={StaticResource Customers}}">
和
<ListBox DataContext="{StaticResource Customers}" ItemsSource="{Binding}">
例如,这两个代码示例执行相同的操作:
1。使用没有代码隐藏的ObjectDataProvider:
<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。没有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();
}
}
}
有没有人知道一个解释WPF数据绑定的来源,而不只是说“这里是你如何进行数据绑定”然后解释一种特定方式,而是尝试解释各种方法来进行数据绑定并显示什么是优点和缺点例如是否有DataContext,绑定在XAML或代码隐藏等?
答案 0 :(得分:3)
查看this备忘单
答案 1 :(得分:1)
我可以推荐Bea Stollnitz的博客。如果我没弄错的话,她在Microsoft工作并参与WPF的开发,特别是在数据绑定方面。她真的有一些很棒的WPF教程,很多都是关于数据绑定的。你应该在这里找到一些非常好的信息。