2

从 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);
        }
    }    
}

那么关于什么是数据绑定源的官方说法是什么?我们应该只绑定到属性吗?还是在技术上也允许字段?

4

1 回答 1

5

不,这不会esplicitly绑定到字段,它通过使用 a 绑定到字段static resource

Binding Source={StaticResource ints //StaticResource !!

您可以(基本上)定义任何您想要的静态资源并绑定到它。如果你想直接绑定到你的类,你需要properties按照文档的建议使用。

于 2012-05-16T14:55:37.793 回答