У меня есть ItemsControl
с его ItemsSource
, связанным с ObservableCollection<T>
, используя мой собственный UserControl
как ItemTemplate
:Как определить, когда шаблонный UserControl удаляется из пользовательского интерфейса (не просто скрыты в UI)
<ItemsControl ItemsSource="{Binding Path=MyObservableColletion, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<MyControls:MyUserControl />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Я он подключен таким образом, что пользовательский интерфейс обновляется по мере добавления/удаления элементов в/из коллекции.
Когда элемент удаляется из коллекции, я хочу обнаружить это в коде для типичного шаблона MyUserControl
. Как я могу это сделать?
Я заметил, что Unloaded
событие срабатывает в этом случае, но это не подходит для моей цели, потому что Unloaded
также срабатывает, когда пользовательский интерфейс, содержащий мой ItemsControl
просто скрыт/разрушилась (например, когда он в TabControl
и вкладка выключен).
Есть ли другое событие для этой цели или способ обнаружения в теле обработчика Unloaded
того, что мой элемент управления определенно удален, а не просто скрыт?
Где находится ваш 'MyObservableCollection', это связано с использованием viewmodel? и 'Mode = OnWay' должен быть' Mode = OneWay' –
Это приложение не использует MVVM, поэтому нет viewmodel - MyObservableCollection находится в коде для элемента управления, который содержит ItemControl. Мой предыдущий пример кода XAML немного упрощен - на самом деле я использую RelativeSource для привязки привязки. (Также я исправил опечатку - спасибо.) – Ross
Вы можете использовать события на ObservableCollection, которые я думаю. https://msdn.microsoft.com/en-us/library/ms668604%28v=vs.110%29.aspx 'CollectionChanged и PropertyChanged' события –