从 WPF 4 Unleashed 一书中:
尽管源属性可以是任何 .NET 对象上的任何 .NET 属性,但对于数据绑定目标则不然。目标属性必须是依赖属性。另请注意,源成员必须是一个真实的(和公共的)属性,而不仅仅是一个简单的字段。
然而,这里有一个反例来反驳源必须是属性的说法。Label
该程序将 a和 a绑定ListBox
到类型为 的普通字段ObservableCollection<int>
。
xml:
<Window x:Class="BindingObservableCollectionCountLabel.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<StackPanel>
<TextBox Name="textBox" Text="10"/>
<Button Name="add" Click="add_Click" Content="Add"/>
<Button Name="del" Click="del_Click" Content="Del"/>
<Label Name="label" Content="{Binding Source={StaticResource ints}, Path=Count}"/>
<ListBox ItemsSource="{Binding Source={StaticResource ints}}"/>
</StackPanel>
</DockPanel>
</Window>
C#:
using System;
using System.Windows;
using System.Collections.ObjectModel;
namespace BindingObservableCollectionCountLabel
{
public partial class MainWindow : Window
{
public ObservableCollection<int> ints;
public MainWindow()
{
Resources.Add("ints", ints = new ObservableCollection<int>());
InitializeComponent();
}
private void add_Click(object sender, RoutedEventArgs e)
{
ints.Add(Convert.ToInt32(textBox.Text));
}
private void del_Click(object sender, RoutedEventArgs e)
{
if (ints.Count > 0) ints.RemoveAt(0);
}
}
}
那么关于什么是数据绑定源的官方说法是什么?我们应该只绑定到属性吗?还是在技术上也允许字段?