当ListView的ItemsSource发生变化时触发事件
本文关键字:事件 变化 ItemsSource ListView | 更新日期: 2023-09-27 18:15:59
我找不到一个可以在窗口加载后调用的事件,在那里我可以访问ListView的ItemsSource。我唯一能想到的是ListView中的Loaded事件,但是当这个事件被触发时,ItemsSource仍然为空。
我可能需要另一个事件,这样我就可以知道ItemsSource中有什么。
所以用代码我可能会更好地暴露我想做的事情:
在自定义类中:
public class GridViewSomething
{
public static readonly DependencyProperty TestProperty =
DependencyProperty.RegisterAttached("Test",
typeof(bool),
typeof(GridViewSomething),
new UIPropertyMetadata(OnTestChanged));
public static bool GetTest(DependencyObject obj)
{
return (bool)obj.GetValue(TestProperty);
}
public static void SetTest(DependencyObject obj, bool value)
{
obj.SetValue(TestProperty, value);
}
static void OnTestChanged(object sender, DependencyPropertyChangedEventArgs e)
{
ListView listView = sender as ListView;
if (!(bool)e.OldValue && (bool)e.NewValue)
listView.AddHandler(ListView.LoadedEvent, new RoutedEventHandler(ListView_Loaded));
else if (!(bool)e.NewValue && (bool)e.OldValue)
listView.RemoveHandler(ListView.LoadedEvent, new RoutedEventHandler(ListView_Loaded);
}
static void ListView_Loaded(object sender, RoutedEventArgs e)
{
ListView listView = sender as ListView;
if (listView.ItemsSource != null)
{
//Do some work
}
}
}
和ListView:
(...)
<ListView ItemsSource="{Binding Students}"
test:GridViewSomething.Test="True">
(...)
我将ListView绑定到这个窗口的ViewModel中的一个集合。我需要确切地知道在自定义类中的ItemsSource中有什么。
那么我怎么才能做到这一点呢?
提前感谢!
您可以使用如下所示的描述符来订阅对ItemsSource
属性的更改。如果检查该处理程序中的值,它不应该为null(除非绑定属性实际上被设置为null)。