Событие пожара при изменении ItemsSource в ListView - PullRequest
2 голосов
/ 28 ноября 2011

Я не могу найти событие, которое можно вызвать после загрузки окна, и где я могу получить доступ к ItemsSource объекта ListView.Единственное, о чем я могу думать, это событие Loaded в ListView, но когда оно запускается, 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">

(...)

Iпривязываю ListView к коллекции в ViewModel этого окна.Мне нужно точно знать, что находится в ItemsSource этого пользовательского класса.

Итак, как мне этого добиться?

Заранее спасибо!

1 Ответ

2 голосов
/ 28 ноября 2011

Вы можете подписаться на изменения в свойстве ItemsSource, используя дескриптор , как показано здесь . Если проверить значение в этом обработчике, оно не должно быть нулевым (если только свойство привязки фактически не установлено в нуль).

...