2014-09-23 62 views
1

用户控件我有一个ItemsControl重复了继承INotifyPropertyChanged的把一个用户控制列表中的每个项目complext对象的ObservableCollection。我的ItemsControl的代码是:WPF OnPropertyChanged的内部ItemsControl的

<ItemsControl ItemsSource="{Binding Path=.ViewModel.Objects}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <c:UserControl CurrentData="{Binding}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

现在我的用户控件非常简单。它的工作原理是我可以输出ObservableCollection中的任何文本以及类似的东西。下面是我的代码吧:

public static DependencyProperty CurrentDataProperty = DependencyProperty.Register("CurrentData", 
    typeof(MyData), 
    typeof(MyUserControl)); 

public Character CurrentData{ 
    get { 
     return (MyData)GetValue(CurrentDataProperty); 
    } 
    set { 
     SetValue(CurrentDataProperty, value); 
    } 
} 

public MyUserControl() { 
    InitializeComponent(); 
} 

我的问题是,从未有一个地步,我可以添加一个事件处理程序,我CurrentData.OnPropertyChange事件。我的XAML绑定,但我想能够做出一些更复杂的决定,但在MyUserControl()数据将为空。有没有办法将处理程序绑定到这些事件?或者我不正确地做这一切?

回答

2

在您注册CurrentData依赖属性,然后挂钩回调的事件处理程序(并从旧的数据解开他们)可以指定属性更改回调:

public static DependencyProperty CurrentDataProperty = DependencyProperty.Register(
    "CurrentData", 
    typeof(MyData), 
    typeof(MyUserControl), 
    new PropertyMetadata(default(MyData), OnCurrentDataPropertyChanged)); 

private static void OnCurrentDataPropertyChanged(
    DependencyObject d, 
    DependencyPropertyChangedEventArgs e) 
{ 
    var oldData = e.OldValue as MyData; 
    if (oldData != null) 
     /* remove event handler(s) for old data */; 

    var newData = e.NewValue as MyData; 
    if (newData != null) 
     /* add event handler(s) for new data */; 
}