windows universal listview .contains方法似乎无法在面板上工作

时间:2016-06-09 23:01:18

标签: c# uwp

我有这个代码我正在测试那些应该检查现有项目的listview控件并返回文本"现有项目"当它找到一个,现在我知道可以使用循环来做到这一点,但我想学习正确使用contains方法,并且无法找到关于如何在面板上使用contains方法的任何真实解释。一旦我从列表视图中删除了堆栈面板,代码似乎确实有效,但是一旦我添加了任何类型的面板,它似乎不再起作用了,我真的很困惑为什么会发生这种情况我会#39 ;我确定我做错了什么,感谢这里的任何帮助代码:

    private void Test_Click(object sender, RoutedEventArgs e)
    {
        TextBlock testblock = new TextBlock();
        testblock.Text = textBox6.Text;

        StackPanel TestPanel = new StackPanel();
        TestPanel.Children.Add(testblock);

        if (listView.Items.Contains(TestPanel))
        {
            textBox5.Text = "existing item";
        }
     else
        {
            listView.Items.Add(TestPanel);
        }
    }

1 个答案:

答案 0 :(得分:1)

第一次触发Test_Click事件时,它将创建StackPanel的新实例。然后它将被添加到ListView.Items

再次触发Test_Click事件时,它将创建StackPanel的另一个新实例。这不等于StackPanel的第一个实例。所以listView.Items.Contains(TestPanel)总是返回false。

我们可以在MainPage类中定义一个名为“TestPanel”的字段,并在构造函数中初始化它,如:

private  StackPanel TestPanel;
private  TextBlock testblock;

public MainPage()
{
    this.InitializeComponent();
    testblock = new TextBlock();
    TestPanel = new StackPanel();
    TestPanel.Children.Add(testblock);
}

private void Test_Click(object sender, RoutedEventArgs e)
{
    if (listView.Items.Contains(TestPanel))
    {
        textBox5.Text = "existing item";
    }
    else
    {
        testblock.Text = textBox6.Text;
        listView.Items.Add(TestPanel);
    }
}