我有这个代码我正在测试那些应该检查现有项目的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);
}
}
答案 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);
}
}