ListView的ItemsSource更改时的Fire事件

时间:2011-11-27 22:08:38

标签: c# wpf xaml data-binding dependency-properties

我找不到一个可以在加载窗口后调用的事件,以及我可以访问ListView的ItemsSource的事件。我唯一能想到的是ListView中的Loaded事件,但是当触发此事件时,ItemsSource仍为null。

我可能需要另一个事件,所以我可以知道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绑定到此Window的ViewModel中的Collection。我需要准确知道该自定义类中ItemsSource的内容。

那我怎么能做到这一点?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以使用描述符as shown here订阅ItemsSource属性的更改。如果检查该处理程序中的值,则它不应为null(除非bound属性实际上设置为null)。