2013-08-28 2 views
4

Я пытаюсь реализовать следующую INotifyPropertyChanged Extension:INotifyPropertyChanged - событие остается нулевой

Automatically INotifyPropertyChanged (принят ответ) http://ingebrigtsen.info/2008/12/11/inotifypropertychanged-revisited/

Но я не могу понять, почему мой PropertyChanged EventHandler остается пустым. :(

Я сделал очень простой WPF приложений, чтобы проверить это, вот мой XAML код:

<StackPanel Orientation="Vertical"> 
    <TextBox Text="{Binding Path=SelTabAccount.Test, UpdateSourceTrigger=PropertyChanged}"></TextBox> 
    <TextBox Text="{Binding Path=SelTabAccount.TestRelated, UpdateSourceTrigger=PropertyChanged}"></TextBox> 
</StackPanel> 

И мой код позади:

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private TabAccount _selTabAccount; 

    public TabAccount SelTabAccount 
    { 
     get { return _selTabAccount; } 
     set 
     { 
      _selTabAccount = value; 
      PropertyChanged.Notify(() => this.SelTabAccount); 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     SelTabAccount = new TabAccount() 
     { 
      Test = "qwer", 
      TestRelated = "" 
     }; 
    } 
} 

public partial class TabAccount : INotifyPropertyChanged 
{ 
    private string _test; 

    public string Test 
    { 
     get { return _test; } 
     set 
     { 
      _test = value; 
      PropertyChanged.Notify(() => this.Test); 
      PropertyChanged.Notify(() => this.TestRelated); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

public partial class TabAccount 
{ 
    private string _testRelated; 

    public string TestRelated 
    { 
     get 
     { 
      _testRelated = Test + "_Related"; 
      return _testRelated; 
     } 
     set 
     { 
      _testRelated = value; 
      PropertyChanged.Notify(() => this.TestRelated); 
     } 
    } 
} 

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

NotificationExtension является копией и вставкой из ссылок, предоставленных в top и находится во внешнем файле cs.

Я также попытался сделать образец с «нормальной» реализацией INotifyPropertyChanged, и это работает так, как ожидалось, но я не могу сделать это с этим классом расширения.

Надеюсь, вы поможете мне разобраться. Спасибо заранее.

ответ

4

Binding будет работать только тогда, когда вы предоставить некоторые источник данных для визуальных объектов. Если вы не предоставляете какой-либо источник данных и хотите вникать в свойства, привязка не будет работать.

Под конструктором MainWindow задайте свойство DataContext окна для источника данных. Например:

public MainWindow() 
{ 
    InitializeComponent(); 

    // your property setups 

    this.DataContext = this; 
} 

По существу, это делает свойство MainWindow доступное для связывания с визуальным деревом MainWindow элементов.

+0

Скопируйте и вставьте ошибки для победы. Забыл установить DataContext в моем XAML DataContext = "{Binding RelativeSource = {RelativeSource Self}}", теперь он работает. –

1

Вам нужно будет установить DataContext Window. Вы можете сделать это в construnctor окна после initializecomponent.

this.DataContext = this; 

Это должно сделать трюк.

Благодаря

+0

Скопируйте и вставьте ошибки для победы. Забыл установить DataContext в моем XAML DataContext = "{Binding RelativeSource = {RelativeSource Self}}", теперь он работает. –

Смежные вопросы