2014-03-07 3 views
0

그래서 내가하고있는 일은 몇 가지 다른 요소와 상호 작용하는 컬렉션이 있다는 것입니다. 하나는 모든 항목에 의존하고 다른 하나는 모든 항목을 필요로하지 않습니다. 예를 들어, 요소 A는 모든 항목을 필요로하지만 그 중 일부에는 {x:Null}DisplayName이 들어 있으므로 요소 B에서 이것을 사용하여 ListBox과 같은 항목으로 나열하지 마십시오. 물론속성을 기반으로 컬렉션의 항목 무시/무시

<ListBox.ItemTemplate> 
    <DataTemplate> 
    <StackPanel Visibility="{Binding DisplayName, Converter={StaticResource nullVisConv}}"> 

     ..... 

    </StackPanel> 
</ListBox.ItemTemplate> 

이 그냥 널의 가시성보다 = 바로 "축소"그렇게하면 DataTemplate의 부모에 대한 가시성을 설정?

문제가 여전히 항목으로 생성되지만 내용을 표시하지 않으므로 목록 상자에 여전히 MouseOver와 같은 항목에 응답하고 공백을 차지하는 빈 항목이 생깁니다. 분명히 최고의 길은 아니므로 여기에서 교육을 기대하고 있습니다.

항목이 {x : Null}과 같은 경우 속성 DisplayName을 기반으로 표시되는 것을 완전히 생략하고 무시할 수 있습니까? 이것은 알기 편리 할 것입니다.

답변

1

DataTemplate의 바인딩을 사용하여이 작업을 수행 할 수 있다고 생각하지 않습니다. 나는 당신이 ListBoxItemSource 속성에 바인딩되기 전에 컬렉션을 필터링/수정해야한다고 생각합니다.

+0

다른 요소와 상호 작용하기 때문에 두 요소가 동일한 ItemSource를 공유해야하기 때문에 문제가있는 곳을 참조하십시오. 내가 수집 한 결과를 필터링하고 두 개의 개별 ItemSource를 제공하지만 여전히 상호 작용할 수 있다고 말할 수 없다면? 그 말이 맞는다면. –

+0

네, ViewModel에서 실제 콜렉션 인 하나의 프라퍼티를 가질 것이고 첫 번째 프라퍼티의 필터링 된 버전을 반환하는 두 번째 프라퍼티를 가질 것이라고 생각했습니다. 따라서 항목이 공유됩니다. 당신이 "서로 상호 작용"한다는 의미를 모른 채 나는 확실히 말할 수는 없지만 그것이 효과가있는 것처럼 보입니다. – Tim

+0

예, 두려웠지만 설명을 간단하게하려고했습니다. 따라서 컬렉션 항목으로 레이어가있는지도가있는 경우 목록 상자를 사용하여 사용자가 다양한 방법으로 해당 레이어와 상호 작용할 수 있습니다. 몇 가지 항목 (레이어)은 레이어와 상호 작용하거나지도 외부에 표시 할 필요가 없습니다. ListBox의 표시에 필요하지 않은 항목을 전체적으로 가져 오려고하지만 동일한 컬렉션에 유지해야하거나 앞뒤로 상호 작용할 수 없으며 필터링을 통해 내가 본 것과 별도의 컬렉션을 만들 수 있습니다. 그것은 혼란 스럽네요 ... 하하 –