Я не могу найти событие, которое можно вызвать после загрузки окна, и где я могу получить доступ к 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 этого пользовательского класса.
Итак, как мне этого добиться?
Заранее спасибо!