INotifyPropertyChanged vs. DependencyProperty
От: Fortnum  
Дата: 29.10.10 15:46
Оценка:
Пока идет очередное
Автор: Fortnum
Дата: 27.10.10
бурное обсуждение интерфейса INotifyPropertyChanged и системы свойств WPF, если честно, я поймал себя на мысли, что не осознаю на сей счет простого факта в части DependencyProperty. И пусть для кого-то это будет не новостью, но я настолько поражен своим "открытием", что должен высказаться. Биндиться к DependencyProperty мы можем? Можем. А INotifyPropertyChanged этот самый DependencyProperty реализует? Нет. То есть биндинг к DependencyProperty — это особый случай биндинга. Но с этим фактом еще жить можно. Смотрим дальше.

Возьмем WPF-окно и посадим в его DataContext экземпляр элементарного класса ViewModel, который не реализует интерфейс INotifyPropertyChanged:
public class ViewModel
{
    public double Value { get; set; }
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DataContext = new ViewModel();
    }
}


В окно посадим два TextBox'а, и прибиндим их к CLR-свойству датаконтекстного экземпляра этого ViewModel:
<Window
    x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel Orientation="Vertical">
        <TextBox Text="{Binding Value}"/>
        <TextBox Text="{Binding Value}"/>
    </StackPanel>
</Window>


Можете кинуть в меня тухлым помидором, но признаюсь, я бы ни за что не догадался, что биндинг при этом будет работать! Да, меняем значение в одном TextBox, меняется значение в другом!

PS. До сего момента из особых случаев биндинга я знал только об автоматическом создании CollectionViewSource при биндинге к коллекциям разного рода, а также об особой работе биндинга с интерфейсом IBindingList.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.