2016-06-09 2 views
0

이 코드가 있습니다. 기존 항목에 대한 listview 컨트롤을 확인하고 "기존 항목"이라는 텍스트를 반환하면, 이제 알 수 있습니다. 루프를 사용하여이 작업을 수행 할 수는 있지만 적절한 메서드 사용법을 배우고 패널에서 메서드를 사용하는 방법에 대한 실제 설명을 찾을 수 없습니다. 코드는 일단 listview에서 stackpanel을 제거하면 작동하는 것처럼 보이지만, 일단 어떤 유형의 패널을 추가하면 더 이상 작동하지 않는 것처럼 보입니다. 그리고 이것이 왜 일어나고 있는지에 대해 당황 스럽습니다. 여기에 어떤 도움을 주셔서 감사합니다 것, 잘못된 일을하는 것은 코드 : 당신이 처음으로 Test_Click 이벤트가 발생하면windows universal listview .contains 메서드가 패널에서 작동하지 않는 것 같습니다.

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

, 그것은 StackPanel의 새로운 인스턴스를 생성합니다. 그런 다음 ListView.Items에 추가됩니다.

Test_Click 이벤트를 다시 발생 시키면 StackPanel의 새 인스턴스가 새로 만들어집니다. 이는 StackPanel의 첫 번째 인스턴스와 동일하지 않습니다. 따라서 listView.Items.Contains(TestPanel)은 항상 false를 반환합니다.

우리는 "TestPanel"라는 그 MainPage 클래스에서 필드를 정의하고 같은 생성자에서 초기화 할 수 있습니다

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); 
    } 
} 
+0

덕분에이 일을 인간! –

관련 문제