检查ListView中是否存在项目

时间:2015-02-20 08:13:36

标签: c# xaml listview

我有这段代码:

    <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}}? 感谢。

3 个答案:

答案 0 :(得分:3)

如果您只是想要已经添加了名称,您可以使用这样的linq

if(!listView2.Items.Any(item => item.Name == theNameToCheck))
{
     //copy item
}

Contains()要求您拥有IEquatableListViews项的类实现:

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;
}