当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中有什么。

那么我怎么才能做到这一点呢?

提前感谢!

当ListView的ItemsSource发生变化时触发事件

您可以使用如下所示的描述符来订阅对ItemsSource属性的更改。如果检查该处理程序中的值,它不应该为null(除非绑定属性实际上被设置为null)。