2014-09-23 90 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 */; 
} 
相關問題