2016-06-30 13 views
0

私はObservableCollectionに項目数が可変です。私は、リストボックスの内部のTextBox内の各項目を表示: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に設定すると、すべての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<>を実装するのは良い考えです。コレクションのサイズによって異なります。次に、イテレータの独自のルールを実装できます(たとえば、最初の項目をスキップするプロパティ)。

関連する問題