我找不到一个可以在加载窗口后调用的事件,以及我可以访问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的内容。
那我怎么能做到这一点?
提前致谢!
答案 0 :(得分:2)
您可以使用描述符as shown here订阅ItemsSource
属性的更改。如果检查该处理程序中的值,则它不应为null(除非bound属性实际上设置为null)。