2016-06-30 3 views
0

가변 개수의 항목이있는 ObservableCollection이 있습니다. 나는 목록 상자의 내부 텍스트 상자에 각 항목을 표시합니다 ObservableCollection의 첫 번째 항목 건너 뛰기

<ListBox ItemsSource="{Binding Collection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
<ListBox.ItemTemplate> 
     <DataTemplate> 
       <TextBox Label="{Binding Title}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
지금 내가 ObservableCollection에의 첫 번째 항목을 건너 뛰려면. 내 ViewModel에서 그렇게 할 수 있는지 /해야하는지 알고 있지만, XAML에서 그렇게 할 수 있는지 알고 싶습니다. 뭔가 같이 :

<ListBox ItemsSource="{Binding Collection.Skip(0), Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
... 
+1

를'모드 = TwoWay'를 지정하고'UpdateSourceTrigger = PropertyChanged'은'ItemsSource' 속성을 바인딩 할 때 이해가되지 않습니다. 컨트롤은 결코 그 속성을 변경하지 않습니다. – Clemens

+0

네, 맞습니다. 그것은 단순한 방식으로 내 문제를 보여주기 위해 다른 코드 코드에서 모아 놓은 예제 일뿐입니다. 바인딩의 해당 부분을 삭제하는 것을 잊었습니다. – L4c0573

답변

1

첨부 된 속성 인 AlternationIndex에 트리거를 설정하여 인덱스를 기반으로 ListBoxItem을 숨길 수 있습니다. 또한 AlternationCount 속성에 대해 충분히 큰 값을 설정해야합니다 : 참고로

<ListBox ItemsSource="{Binding Collection}" AlternationCount="2147483647"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Style.Triggers> 
       <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    ... 
</ListBox> 
+0

빠르고 더러운 것 같습니다. 그러나 그것이 내가 기대했던 것이다 :). 잘 작동합니다. 고마워요. 그러나 AlternationCount는 무엇이며 왜 그렇게 큰 가치를 설정해야합니까? – L4c0573

+0

알았어. 이 경우 2147483647 번째 항목이 모두 축소됩니다. AlternationCount를 2로 설정하면 모든 두 번째 항목이 축소됩니다. 권리? – L4c0573

1

가장 간단한 방법은 2 개 곳입니다 :

List<Item> _list = new List<Item>(); 

public ObservableCollection<Item> Collection => new ObservableCollection<Item>(_list); 

public ObservableCollection<Item> Collection2 => 
    new ObservableCollection<Item>(_list.Skip(0)); 

것입니다 만 뷰에 존재하는 그 관찰 컬렉션 (각 속성에 대한 ObservableCollection을 만들어 한 번 속성 게터를 호출합니다 바인딩). 당신이 _list을 변경하는 경우

, 다음 뷰 업데이트 모두 속성이 변경되는 것을 통지 :

_list.Add(new Item()); 
OnPropertyChanged(nameof(Collection)); 
OnPropertyChanged(nameof(Collection2)); 

나는 당신이 주어진 경우에 다른 일을 할 수 있다고 생각하지 않습니다. 예 : disabling item 또는 항목 템플릿을 사용하여 항목을 표시하는 방법에 다른 변경을 가할 수는 있지만 항목을 완전히 제거하는 것은 그렇게 생각하지 않습니다. 적어도 쉬지 않을 것입니다 (자신의 ContainerTemplate 타입은 첫 번째 아이템을 건너 뛰는 타입입니까?).

P .: 아마도 copy list이 아닌 자신의 ObservableCollection<>을 구현합니다 (하지만 각 인스턴스마다 동일한 소스를 사용함). 컬렉션 크기에 따라 다릅니다. 그런 다음 반복자에 대한 자체 규칙을 구현할 수 있습니다 (예 : 첫 번째 항목을 건너 뛰는 속성).

관련 문제