2010-02-17 4 views
3

내가 누락 된 단순한 무언가가있을 것이라고 확신하지만, 나는이 시점에서 내가 실망했다고 고백해야한다.WPF/C# : TabControl 안에서 TabItem을 어떻게 참조하나요?

프로그래밍 방식으로 주 TabControl에 TabItem을 추가합니다. 사용자가 열려고 선택한 각 계정에 하나씩 프로그래밍 방식으로 추가합니다. 새 TabItem을 작성하고 추가하기 전에 사용자가 이미 다른 탭에서 해당 계정을 열 었는지 확인하고 싶습니다. 나는 두 개의 동일한 탭을 열어서 끝내고 싶지 않습니다.

다음은 내가 원래 작성한 코드입니다. 다행히도 내가 성취하려고하는 것에 대한 아이디어를 줄 수 있기를 바랍니다.

물론 이것은 제대로 작동하지 않습니다. WinForms에서 TabControl에는 TabPage의 이름을 검색하는 데 사용할 수있는 ContainsKey 메서드가있는 TabPages 컬렉션이 있습니다. Items.Contains() 메서드는 인수로 객체를 지정하고 항목의 이름을 참조하지 않기 때문에 찾고있는 것을 얻지 못합니다!

모든 도움을 주시면 대단히 감사하겠습니다.

감사합니다.

답변

9

Contains() 메서드는 찾고있는 실제 TabItem을 (를) 전달하기를 바라며, 따라서 도움이되지 않습니다. 하지만 작동합니다 :

var matchingItem = 
    tab_main.Items.Cast<TabItem>() 
    .Where(item => item.Name == accountNumber) 
    .FirstOrDefault(); 

if(matchingItem!=null) 
    tab_main.SelectedItem = matchingItem; 
else 
    ... 
+0

레이, 나는 '캐스트'에 대한 호출로 편집의 자유를 취했습니다. TabControl.Items는'IEnumerable'이지만 IEnumerable 이 아니므로 LINQ Where 연산자를 직접 지원하지는 않습니다. – itowlson

+0

답장을 보내 주셔서 감사합니다! 편집하기 전에 작동하지 않았고 또 다른 비슷한 솔루션을 생각해 냈습니다. 확실히 올바른 방향으로 생각하게 만들었습니다! 나는 매우 비슷한 해결책을 찾았지만 누군가가 도와 줄 시간이 있다면 또 다른 답으로 게시 할 질문을 하나 따랐다! –

1

답장 보내 주셔서 감사합니다! 편집하기 전에 작동하지 않았고 또 다른 비슷한 솔루션을 생각해 냈습니다. 확실히 올바른 방향으로 생각하게 만들었습니다! 나는 여전히 LINQ와 lambda 표현에 익숙하지 않다. 경우 다른 사람에

이 또한 나를 위해 일한 솔루션을 찾고있다 :

var matchingItem = 
    from TabItem t in tab_main.Items where t.Name == searchHash select t; 

if (matchingItem.Count() != 0) 
    tab_main.SelectedItem = matchingItem.ElementAt(0); 
else 
    ... 

마지막으로 질문 사람이 ... 참조하여 matchingItem에서 요소를 선택하는 더 우아한 방법이이 글을 읽는 경우 name 속성 대 올바른 요소가 위치 0에 있다고 가정 할 때?

+0

"올바른 요소"일 필요는 없습니다. 둘 이상의 요소가 동일한 Name 속성을 가질 수 있습니다. 이름이'INameScope.RegisterName'을 사용하여 등록되면,'INameScope.FindName'은 그 이름을 찾을 것입니다. 그러나 여기에 열거하지 않을 몇 가지 이유로 좋은 디자인이 아닙니다. WPF를 사용하면 이전 WinForms 스타일 디자인이 아닌 MVVM 디자인을 사용해야합니다. StackOverflow 및 다른 곳에서 MVVM에 대해 알아보십시오. –

+0

참고 : 일반적으로 스택 오버플로는 사용자가 기존 질문을 확장하지 않고 새로운 질문으로 "후속"질문을하는 것을 권장합니다. 자세한 내용은 meta.stackoverflow.com의 FAQ 및 토론을 참조하십시오. –

+0

MVVM 디자인을 가르쳐 주셔서 감사합니다. –