我有这段代码:
<Page.Resources>
<DataTemplate x:Key="IconTextDataTemplate">
<StackPanel Orientation="Horizontal" Width="220" Height="60" Background="#FF729FD4">
<Border Background="#66727272" Width="40" Height="40" Margin="10">
<Image Source="/SampleImage.png" Height="32" Width="32" Stretch="UniformToFill"/>
</Border>
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<TextBlock Text="{Binding Name}" Margin="10,0,0,0" Width="170" Height="20" TextTrimming="WordEllipsis"/>
<TextBlock Text="{Binding Description}" Margin="10,0,0,0" Width="170" Height="20" TextTrimming="WordEllipsis"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</Page.Resources>
<ListView x:Name="Name" ItemTemplate="{StaticResource IconTextDataTemplate}" Grid.Row="6" Margin="40,20,40,10" HorizontalAlignment="Stretch" Foreground="White" SelectionChanged="DoSomething">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid MaximumRowsOrColumns="4"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
另一个ListView
具有与另一个x:Name
相同的属性。我需要将项目从一个ListView
复制到另一个ListView
。
我有一个代码可以执行此操作,我的问题是如何检查一个ListView
中的项目是否已复制到第二个{{1}}?
感谢。
答案 0 :(得分:3)
如果您只是想要已经添加了名称,您可以使用这样的linq
if(!listView2.Items.Any(item => item.Name == theNameToCheck))
{
//copy item
}
Contains()
要求您拥有IEquatable
由ListViews
项的类实现:
class Test : IEquatable<Test>
{
public string Name { get; set; }
public int OtherProperty { get; set; }
public bool Equals(Test other)
{
return other.Name == this.Name;
}
}
然后你可以这样做:
if(!listView2.Items.Contains(theItem))
{
listView2.Items.Add(theItem);
}
除非你真的拥有相同的类实例而不是类的副本(具有相同属性的另一个对象),否则
答案 1 :(得分:0)
假设您只是给listviews提供一个简单的列表:
listView1.Items = myItemList;
并使用相同的列表将元素复制到第二个列表视图,您可以这样做:
MyItem itemToCopy = listView1.SelectedItem; //Or where ever your item comes from
if(!listView2.Items.contains(itemToCopy)
{
listView2.Items.add(itemToCopy);
}
else
{
// Item is already in the list
}
答案 2 :(得分:0)
如果我找对你,你有两个清单。 你可以从一个复制到另一个,之后你可以用foreach循环来创建新的列表。 我认为应该是这样的:
bool found = false;
foreach(ListviewItem originalItem in myOriginalList.Items)
{
foreach(ListViewItem copiedItem in myNewList.Items)
{
//Check for equality between both items
if(originalItem.Text == copiedItem.Text)
{
found = true;
break;
}
}
//Check if the entry is found
if(found == false)
{
//TRY TO COPY AGAIN
}
//Set the bool back
found = false;
}