C# WPF侦听ListViewItem删除
我想“收听”我的主C# WPF侦听ListViewItem删除,c#,wpf,listview,observablecollection,listviewitem,C#,Wpf,Listview,Observablecollection,Listviewitem,我想“收听”我的主列表视图,如果删除了一个或多个项目,那么它们在另一个列表视图中的克隆也将被删除。 例如: 我在主列表视图中有5项 在第二个列表视图中我有两个克隆项(它们在主列表视图中的位置是0和2) 在第三个列表视图中我还有另外两个克隆项(它们在主“列表视图”中的位置是0和4) 当我从主列表视图中删除项目编号0时,我希望它从其他列表视图的所有克隆中删除。 现在,我正在做的是,当项目从主列表视图中删除时,我循环通过其他列表视图来检查它是否与删除的项目匹配,如果匹配,我也会删除它们 我读到了有关可
列表视图
,如果删除了一个或多个项目,那么它们在另一个列表视图
中的克隆也将被删除。例如:
我在主
列表视图中有5项
在第二个列表视图中
我有两个克隆项(它们在主列表视图中的位置是0和2)
在第三个列表视图中
我还有另外两个克隆项(它们在主“列表视图”中的位置是0和4)
当我从主列表视图
中删除项目编号0时,我希望它从其他列表视图
的所有克隆中删除。
现在,我正在做的是,当项目从主列表视图中删除时,我循环通过其他列表视图来检查它是否与删除的项目匹配,如果匹配,我也会删除它们
我读到了有关可观察收集的,
,但我不知道如何根据我的需要实现它。。。希望您能提供帮助/简单指南,简单解释如何操作
编辑:
这是WinForms解决方案-我不知道如何将其转换为WPF解决方案,而且我甚至不确定这是否是我需要的
将ListView对象绑定到某个集合(最好是可观察的集合)并从可观察的集合中添加/删除项目,而不是直接向ListView对象添加或从ListView对象中删除项目,它也会反映在您的UI上
乙二醇
为了显示克隆的ListView中的项目,请在主ObservableCollection中添加一个事件处理程序,如
MyCollection.CollectionChanged+=new System.Collections.Specialized.NotifyCollectionChangedEventHandler(CollectionChanged);
及
将ListView对象绑定到某个集合(最好是可观察的集合)并从可观察的集合中添加/删除项目,而不是直接向ListView对象添加或从ListView对象中删除项目,它还将反映在您的UI上
乙二醇
为了显示克隆的ListView中的项目,请在主ObservableCollection中添加一个事件处理程序,如
MyCollection.CollectionChanged+=new System.Collections.Specialized.NotifyCollectionChangedEventHandler(CollectionChanged);
及
将ListView对象绑定到某个集合(最好是可观察的集合)并从可观察的集合中添加/删除项目,而不是直接向ListView对象添加或从ListView对象中删除项目,它还将反映在您的UI上
乙二醇
为了显示克隆的ListView中的项目,请在主ObservableCollection中添加一个事件处理程序,如
MyCollection.CollectionChanged+=new System.Collections.Specialized.NotifyCollectionChangedEventHandler(CollectionChanged);
及
将ListView对象绑定到某个集合(最好是可观察的集合)并从可观察的集合中添加/删除项目,而不是直接向ListView对象添加或从ListView对象中删除项目,它还将反映在您的UI上
乙二醇
为了显示克隆的ListView中的项目,请在主ObservableCollection中添加一个事件处理程序,如
MyCollection.CollectionChanged+=new System.Collections.Specialized.NotifyCollectionChangedEventHandler(CollectionChanged);
及
为了说明我在评论部分的观点,假设您有一个名为WindowItem
的UserControl
实现了Clone
方法:
<UserControl x:Class="WpfApplication1.WindowItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Button Content="Click me"/>
</Grid>
</UserControl>
我还创建了一个包含三个列表视图的视图
,通过
现在,我可以为不同的集合创建用户控件的克隆,显示在视图中的不同列表中,并注册到第一个集合的CollectionChanged
事件。下面是一个从ViewModel构造函数执行此操作的示例
public MainWindowViewModel()
{
FirstCollection = new ObservableCollection<WindowItem>();
SecondCollection = new ObservableCollection<WindowItem>();
ThirdCollection = new ObservableCollection<WindowItem>();
var windowItem = new WindowItem();
FirstCollection.Add(windowItem);
SecondCollection.Add(windowItem.Clone());
// Register to collection changes notifications
FirstCollection.CollectionChanged += FirstCollectionChanged;
}
您可以通过从第一个集合中删除项来测试它
FirstCollection.RemoveAt(0);
希望这有助于说明我在评论部分的观点,假设您有一个名为WindowItem
的UserControl
,它实现了一个Clone
方法:
<UserControl x:Class="WpfApplication1.WindowItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Button Content="Click me"/>
</Grid>
</UserControl>
我还创建了一个包含三个列表视图的视图
,通过
现在,我可以为不同的集合创建用户控件的克隆,显示在视图中的不同列表中,并注册到第一个集合的CollectionChanged
事件。下面是一个从ViewModel构造函数执行此操作的示例
public MainWindowViewModel()
{
FirstCollection = new ObservableCollection<WindowItem>();
SecondCollection = new ObservableCollection<WindowItem>();
ThirdCollection = new ObservableCollection<WindowItem>();
var windowItem = new WindowItem();
FirstCollection.Add(windowItem);
SecondCollection.Add(windowItem.Clone());
// Register to collection changes notifications
FirstCollection.CollectionChanged += FirstCollectionChanged;
}
您可以通过从第一个集合中删除项来测试它
FirstCollection.RemoveAt(0);
希望这有助于说明我在评论部分的观点,假设您有一个名为WindowItem
的UserControl
,它实现了一个Clone
方法:
<UserControl x:Class="WpfApplication1.WindowItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Button Content="Click me"/>
</Grid>
</UserControl>
我还创建了一个包含三个列表视图的视图
,通过
现在,我可以为不同的集合创建用户控件的克隆,显示在视图中的不同列表中,并注册到第一个集合的CollectionChanged
事件。下面是一个从ViewModel构造函数执行此操作的示例
public MainWindowViewModel()
{
FirstCollection = new ObservableCollection<WindowItem>();
SecondCollection = new ObservableCollection<WindowItem>();
ThirdCollection = new ObservableCollection<WindowItem>();
var windowItem = new WindowItem();
FirstCollection.Add(windowItem);
SecondCollection.Add(windowItem.Clone());
// Register to collection changes notifications
FirstCollection.CollectionChanged += FirstCollectionChanged;
}
您可以通过从第一个集合中删除项来测试它
FirstCollection.RemoveAt(0);
希望这有助于说明我在评论部分的观点,假设您有一个名为WindowItem
的UserControl
,它实现了一个Clone
方法:
<UserControl x:Class="WpfApplication1.WindowItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Button Content="Click me"/>
</Grid>
</UserControl>
我还创建了一个包含三个列表视图的视图
,通过
现在,我可以为不同的集合创建用户控件的克隆,显示在视图中的不同列表中,并注册到第一个集合的CollectionChanged
事件。下面是一个从ViewModel构造函数执行此操作的示例
public MainWindowViewModel()
{
FirstCollection = new ObservableCollection<WindowItem>();
SecondCollection = new ObservableCollection<WindowItem>();
ThirdCollection = new ObservableCollection<WindowItem>();
var windowItem = new WindowItem();
FirstCollection.Add(windowItem);
SecondCollection.Add(windowItem.Clone());
// Register to collection changes notifications
FirstCollection.CollectionChanged += FirstCollectionChanged;
}
您可以通过从第一个集合中删除项来测试它
FirstCollection.RemoveAt(0);
希望这有帮助当项目从主列表视图中删除时,可观察收集将通知您,但它不会“照顾”其他列表视图中的克隆,您仍然需要自己处理。由于您已经实现了这一点,我正在做的是,当项目从主列表视图中删除时…
我看不出这对您有什么帮助您如何为其他列表视图创建克隆?是否有任何特殊原因导致它们不能只是对同一对象的引用?您不能将同一项添加到两个不同的ListView…,这些项是自定义UserControl,克隆函数位于UserControl类:public中