ViewModelパターンを使用している場合、クリーンな方法は、上位N個のアイテムを含む別のObservableCollectionを用意することです。そうすれば、バインディングは直接であり、モデルを変更するだけで3を任意のNに変更できます。
public class MyViewModel
{
private ObservableCollection<string> myList;
public ObservableCollection<string> MyList
{
get { return myList; }
set { return myList; }
}
public Collection<string> MyListTop3
{
get { return new Collection<string>(MyList.Take(3).ToList()); }
}
public MyViewModel()
{
myList = new ObservableCollection<string>();
myList.CollectionChanged += (sender, args) =>
{
RaisePropertyChanged("MyListTop3");
};
}
}
XAMLを介してのみそのケアをしたい場合(クリーンイーストの方法はありません):
<ListBox>
<ListBox.Resources>
<ContentPresenter x:Key="value0" Content="{Binding MyList[0]}"/>
<ContentPresenter x:Key="value1" Content="{Binding MyList[1]}"/>
<ContentPresenter x:Key="value2" Content="{Binding MyList[2]}"/>
</ListBox.Resources>
<ListBoxItem Content="{DynamicResource value0}"/>
<ListBoxItem Content="{DynamicResource value1}"/>
<ListBoxItem Content="{DynamicResource value2}"/>
</ListBox>
この例はListBoxを示していますが、他のコントロールで使用できます。