2012-05-16 3 views
2

Из книги WPF 4 Развязанная:Какое официальное слово связывается с не-свойствами (например, поля)?

Хотя свойство источника может быть любым .NET свойством любого объекта .NET , то же самое справедлив для цели привязки данных. Объект target должен быть зависимым. Также обратите внимание, что элемент источника должен быть реальным (и общедоступным) свойством, а не просто простым полем.

Однако, вот пример встречного утверждения, согласно которому источником должно быть имущество. Эта программа связывает Label и ListBox с обычным полем типа ObservableCollection<int>.

Xaml:

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

Так что официальное слово о том, что квалифицируется как источник привязки данных? Должны ли мы привязываться только к свойствам? Или также технически разрешены поля?

ответ

5

Нет, это не связывается с полем esplicitly, он связывается с полем, с помощью static resource:

Binding Source={StaticResource ints //StaticResource !! 

Вы можете определить статический ресурс, что вы хотите (в основном) и привязку к нему. Если вы хотите связать напрямую с вашим классом, вам следует использовать properties, как предлагает документация.

+0

Спасибо за разъяснение Тигран! – dharmatech

+0

@dharmatech: добро пожаловать – Tigran

+0

Привязка к свойству также позволяет использовать INotifyPropertyChanged, который является огромным основным элементом WPF. – Yatrix