问题描述
我正在使用WPF,并且我有两个从数据库填充的ListView。
ListView A:
<ListView Name="MyListViewNameA" ItemsSource="{Binding SourceValues}"
View="{Binding SourceValuesMappings,Converter={StaticResource MappingsConfigToGridViewConverter}}"
SelectedItem="{Binding SelectedSourceValue}"/>
ListView B:
<ListView Name="MyListViewNameB" ItemsSource="{Binding DestinationValues}"
View="{Binding DestinationValuesMappings,Converter={StaticResource MappingsConfigToGridViewConverter}}"
SelectedItem="{Binding SelectedDestinationValue}"/>
现在,ItemSource属性由一个虚拟化的集合填充,该集合使用一个从数据库中获取数据的项目提供程序。
要澄清:当我向下或向上滚动到两个ListView时,虚拟化集合将进行管理,以基于索引和250条记录的页面大小来获取适当的记录。
同时, MappingsConfigToGridViewConverter 接受了一些也来自数据库的映射,并使用此映射创建了一些动态列。
当我从ListView A中选择一个项目,然后从ListView B中选择一个项目,然后单击一个按钮时,我将复杂对象添加到第三个ListView C中,如下所示:
public class MyComplexObject
{
public ValueObject SourceValue { get; set; }
public ValueObject DestinationValue { get; set; }
public DatabaSEObject MatchedValuetoSavetoDatabase { get; set; }
}
当我从ListView C添加或删除记录时,我想分别从ListView A和ListView B添加或删除所选项目。
要注意的是,虚拟化集合不支持添加或删除。因此,我决定以视觉方式代替它。
问题在于,在视觉表示上,我不能仅仅基于所选项目更改可见性,因为当我获取另一页然后返回到上一页时,视觉提示将消失。
此外,虚拟化集合是我无法更改的黑盒。
我已经尝试过这样的转换器:
<ListView.ItemContainerStyle>
<Style targettype="ListViewItem">
<Setter Property="Background" Value="White"/>
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MyDataToBoolConverter}">
<Binding RelativeSource="{RelativeSource Self}"/>
<Binding RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType=UserControl}" Path="DataContext.MyComplexObjectList" />
</MultiBinding>
</DataTrigger.Binding>
<DataTrigger.Setters>
<Setter Property="Background" Value="Red"/>
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
上面的代码能够触发我的转换器,但只能向上或向下滚动。当我向ListView C添加对象时不可以。
我也试图使用这样的事件:
public ManualMatchProcessView()
{
InitializeComponent();
((INotifyCollectionChanged)SourceValues.Items).CollectionChanged += SourceValues_CollectionChanged;
}
private void SourceValues_CollectionChanged(object sender,NotifyCollectionChangedEventArgs e)
{
}
,但是第一次初始化集合时,事件仅触发一次。 并非每次获取虚拟化收藏集时都如此。
我要寻找的东西类似于ListViewItem完成绘制事件时的方式以及应该如何实现。
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)