WPF ListView UI 获取新添加的 UI 元素
WPF ListView UI get newly added UI element
在我的应用程序中,用户可以动态地添加、删除和编辑 ListView 中的元素。它的数据绑定到包含自定义对象的集合 class(哪些属性绑定到 ListView 的 GridView-Headers 以显示数据)。
现在我需要找到一种方法来获取每个新添加或编辑的项目的 ListViewItem UI 元素对象,以便根据某些因素在代码后面动态设置 ListViewItem 的样式。
在我使用以下代码的过程中,如果已经添加了元素(UI 元素及其关联的数据元素),则该代码工作正常,因此万一更新了元素:
var listItem = listView.ItemContainerGenerator.ContainerFromItem(item) as ListViewItem;
if (!isValid)
{
listItem.Background = Brushes.Red;
listItem.Foreground = Brushes.Black;
}
item
在这种情况下是我的自定义 class 的一个对象,它也可以在 ListView 的 ItemsSource 中找到。 ListView.ItemsSource 和集合本身的事件显然是在添加元素后直接引发的,但 UI 尚未更新,例如还没有与新添加的数据元素相对应的 ListViewItem 对象,因此上面显示的方法总是 returns null
for listItem
。
listView.ItemContainerGenerator.ItemsChanged
-事件看起来很有希望,但是ItemsChangedEventArgs
似乎没有包含任何有用的信息,所以我真的卡住了。
虽然获取列表数据本身似乎很容易,但我还没有找到在 UI 元素创建并可视化添加到列表后立即获取这些元素的方法。上面显示的方法,只涉及更新已经存在的元素。
I haven't found a way to get the UI elements right after they have been created and visually added to the list
您可以通过将事件处理程序挂接到 XAML 标记中的容器来实现:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="Loaded" Handler="ListViewItem_Loaded" />
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
private void ListViewItem_Loaded(object sender, RoutedEventArgs e)
{
ListViewItem lvi = (ListViewItem)sender;
...
}
在我的应用程序中,用户可以动态地添加、删除和编辑 ListView 中的元素。它的数据绑定到包含自定义对象的集合 class(哪些属性绑定到 ListView 的 GridView-Headers 以显示数据)。
现在我需要找到一种方法来获取每个新添加或编辑的项目的 ListViewItem UI 元素对象,以便根据某些因素在代码后面动态设置 ListViewItem 的样式。
在我使用以下代码的过程中,如果已经添加了元素(UI 元素及其关联的数据元素),则该代码工作正常,因此万一更新了元素:
var listItem = listView.ItemContainerGenerator.ContainerFromItem(item) as ListViewItem;
if (!isValid)
{
listItem.Background = Brushes.Red;
listItem.Foreground = Brushes.Black;
}
item
在这种情况下是我的自定义 class 的一个对象,它也可以在 ListView 的 ItemsSource 中找到。 ListView.ItemsSource 和集合本身的事件显然是在添加元素后直接引发的,但 UI 尚未更新,例如还没有与新添加的数据元素相对应的 ListViewItem 对象,因此上面显示的方法总是 returns null
for listItem
。
listView.ItemContainerGenerator.ItemsChanged
-事件看起来很有希望,但是ItemsChangedEventArgs
似乎没有包含任何有用的信息,所以我真的卡住了。
虽然获取列表数据本身似乎很容易,但我还没有找到在 UI 元素创建并可视化添加到列表后立即获取这些元素的方法。上面显示的方法,只涉及更新已经存在的元素。
I haven't found a way to get the UI elements right after they have been created and visually added to the list
您可以通过将事件处理程序挂接到 XAML 标记中的容器来实现:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="Loaded" Handler="ListViewItem_Loaded" />
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
private void ListViewItem_Loaded(object sender, RoutedEventArgs e)
{
ListViewItem lvi = (ListViewItem)sender;
...
}