항목 컨트롤에 표시되는 행 수를 제한하는 방법이 있습니까? ?Items 컨트롤에 표시되는 행 수 제한
Items 컨트롤에 바인딩 된 관찰 가능한 컬렉션의 문자열이 있습니다. 표시 할 행 수를 하나만 제한하려고합니다. 컬렉션에는 둘 이상의 컬렉션이있을 수 있습니다.
감사합니다,
항목 컨트롤에 표시되는 행 수를 제한하는 방법이 있습니까? ?Items 컨트롤에 표시되는 행 수 제한
Items 컨트롤에 바인딩 된 관찰 가능한 컬렉션의 문자열이 있습니다. 표시 할 행 수를 하나만 제한하려고합니다. 컬렉션에는 둘 이상의 컬렉션이있을 수 있습니다.
감사합니다,
체크 아웃 여기 http://jobijoy.blogspot.com/2008/12/paginated-observablecollection.html
내 PaginatedObservableCollection을 이렇게하면 N 항목에 결합하고 ItemsPerPage를 설정할 때 UI 디스플레이 'N'항목을 만들 수 있습니다 서브 클래 싱 된 ObservableCollection에 있습니다. 귀하의 경우에는 1을 넣고 내 샘플에서와 같이 다음 버튼과 이전 버튼을 바인딩 할 수 있습니다.
희망이 있으시면 알려주세요.
나는 observable 컬렉션에 대한 어떠한 통제도 가지고 있지 않다. paginatedObservableCollection을 사용하도록 변경할 수 없습니다. – RRR
ItemsSource
이 MyObservableCollection
으로 설정되어 있다고 가정 해 보겠습니다.
글쎄, ItemsSource
을 MyOneItemCollection
으로 바꾸려면 어떻게해야합니까?
그런 다음, 바로 이런 일을 할 LINQ를 사용
using System.Linq;
MyOneItemCollection = MyObservableCollection.First();
또는
using System.Linq;
MyOneItemCollection = MyObservableCollection.Single(item => item.Id = MyId);
코드를 작성하지 않고, 완전히 XAML이 할 수있는 방법이 있나요?
<ItemsControl Height="100" ItemsSource="{erm:Items FieldName}" Grid.Row="1" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" TextWrapping="Wrap" FontSize="14" VerticalAlignment="Center" FontWeight="Bold" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
나는 위와 같은 항목을 바인딩했습니다. Items 태그 확장은 observable 문자열 컬렉션을 반환하고 observable 컬렉션에 대한 제어권이 없습니다.
n
요소 만 제공하는 사용자 지정 CollectionView
을 구현할 수 있습니다. 내 자동 완성 텍스트 상자 컨트롤 구현에 비슷한했다, 여기에 체크 아웃 :
A Reusable WPF Autocomplete TextBox
스크롤 Limiting the Completions List
제목 헤더 아래는 내가 거기에 무슨 짓을 참조하십시오.
단일 항목 만 생성하는 CollectionView
을 만들어이 작업을 수행 할 수 있습니다. 이것은 매우 간단합니다 : 그냥 CollectionView
를 서브 클래스와 기본 컬렉션의 첫 번째 항목을 제외한 모든 필터링하는 필터를 설정 OnCollectionChanged
를 오버라이드 (override) :
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs args)
{
base.OnCollectionChanged(args);
var first = SourceCollection.FirstOrDefault();
Filter = (obj) => obj == first;
}
지금 당신은 당신의 ItemsSource
에이 CollectionView
를 삽입해야합니다. erm:Items
의 ProvideValue
이 실제 컬렉션을 생성하거나 변환기가없는 바인딩을 생성하는 경우 사용자 정의보기에서 래핑하거나 변환기를 추가하여 래핑을 수행하는 자체 MarkupExtension을 만들면됩니다. 반면에, erm : Items가 이미 Converter가있는 Binding을 생성하거나 생성 된 것을 아는 데 의존 할 수 없다면 좀 더 일반적인 솔루션을 사용해야합니다. 연결된 속성을 제안 할 것입니다.
<ItemsControl
my:SinglerCollectionViewCreator.ItemsSource="{erm:Items FieldName}"
... />
과 SinglerCollectionViewCreator 클래스의 코드는 다음과 같습니다 : 연결된 속성을 사용하려면
은, 당신의 ItemsControl에이 같은 바인딩됩니다
public class SinglerCollectionViewCreator : DependencyObject
{
public object GetItemsSource(... // use "propa" snippet to fill this in
public void SetItemsSource(....
public static readonly DependencyProperty ItemsSourceProperty = ...
{
PropertyChangedCallback = (obj, e)
{
obj.SetValue(ItemsControl.ItemsSourceProperty,
new SinglerCollectionView(e.NewValue));
}
}
}
방법이 작품은, 때마다 새를 SinglerCollectionViewCreator.ItemsSource
속성이 모든 개체에 설정되어 있으면 값은 SinglerCollectionView
클래스에 래핑되고 ItemsControl.ItemsSource
은 같은 개체에 설정됩니다.
당신은 오직 대신 사용 가능한 동일하는 주형 옵션이있는 ContentControl을을 사용하여 첫 번째 항목을 표시 할 수 있습니다 표시 한 항목이 필요한 경우 :
<ContentControl DataContext="{erm:Items FieldName}" Content="{Binding [0]}">
<DataTemplate>
<TextBlock Text="{Binding}" TextWrapping="Wrap" FontSize="14" VerticalAlignment="Center" FontWeight="Bold" />
</DataTemplate>
</ContentControl>
당신은 변환기 보르를 사용할 수 있습니다이 :
public class ItemsLimiter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
int count;
if (Int32.TryParse((string)parameter, out count))
{
return ((IEnumerable<object>)value).Take(count);
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return null;
}
}
XAML에서
이처럼 사용할 수 있습니다
<ItemsControl ItemsSource="{x:Bind Data, Converter={StaticResource ItemsLimiter}, ConverterParameter=12}">
당신이 컬렉션 중 어떤 항목을 결정하려면 어떻게 보여줄까요? 사용자가 선택한 항목을 어떻게 변경할 수 있습니까? 더 많은 정보를 추가하려면 질문을 변경하십시오. 그렇게하려면 자신의 질문에 대답하지 마십시오. – Dabblernl