반응형
XAML만 사용하고 코드 배후는 사용하지 않고 ListBox를 정렬하려면 어떻게 해야 합니까?
스트링을 정렬할 필요가 있습니다.ListBox
단, 다른 컴포넌트에 의해 뷰모델에 바인드 됩니다.DataContext
따라서 XAML에서는 뷰 모델을 직접 인스턴스화할 수 없습니다.이 예에서는, 다음의 예를 사용하고 있습니다.ObjectDataProvider
.
내 XAML:
<ListBox ItemsSource="{Binding CollectionOfStrings}" />
내 뷰 모델:
public ObservableCollection<string> CollectionOfStrings
{
get { return collectionOfStrings; }
}
다른 컴포넌트:
view.DataContext = new ViewModel();
뒤에 코드는 없습니다!순수하게 XAML을 사용하는 경우 ListBox 내의 아이템을 어떻게 정렬해야 합니까?다시 말하지만 XAML은 뷰 모델의 인스턴스화를 소유하지 않습니다.
를 사용합니다.
<CollectionViewSource x:Key="SortedItems" Source="{Binding CollectionOfStrings}"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="SomePropertyOnYourItems"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
<ListBox ItemsSource="{Binding Source={StaticResource SortedItems}}"/>
정렬 동작을 더 쉽게 적용할 수 있도록 사용자 지정 VM 클래스로 문자열을 줄 바꿈할 수 있습니다.
첨부된 속성이 코드 없음으로 인정될 경우 다음을 사용할 수 있습니다.
public static class Sort
{
public static readonly DependencyProperty DirectionProperty = DependencyProperty.RegisterAttached(
"Direction",
typeof(ListSortDirection?),
typeof(Sort),
new PropertyMetadata(
default(ListSortDirection?),
OnDirectionChanged));
[AttachedPropertyBrowsableForType(typeof(ItemsControl))]
public static ListSortDirection? GetDirection(ItemsControl element)
{
return (ListSortDirection)element.GetValue(DirectionProperty);
}
public static void SetDirection(ItemsControl element, ListSortDirection? value)
{
element.SetValue(DirectionProperty, value);
}
private static void OnDirectionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is ItemsControl { Items: { } items })
{
if (e.NewValue is ListSortDirection direction)
{
items.SortDescriptions.Add(new SortDescription(string.Empty, direction));
}
else if (e.OldValue is ListSortDirection old &&
items.SortDescriptions.FirstOrDefault(x => x.Direction == old) is { } oldDescription)
{
items.SortDescriptions.Remove(oldDescription);
}
}
}
}
그러면 xaml:
<ListBox local:Sort.Direction="Ascending"
... />
유형이 다른 연결된 속성입니다.SortDescription
아마 많은 경우에 말이 되겠지요.
언급URL : https://stackoverflow.com/questions/1280704/how-can-i-sort-a-listbox-using-only-xaml-and-no-code-behind
반응형
'programing' 카테고리의 다른 글
Python Setup 비활성화 경로 길이 제한 장단점? (0) | 2023.04.22 |
---|---|
종속성 속성에서 세터가 실행되지 않습니까? (0) | 2023.04.17 |
Git 브랜치에서 다른 브랜치로 단일 파일 버전을 복사하려면 어떻게 해야 합니까? (0) | 2023.04.17 |
Swift-Language 오류 처리 (0) | 2023.04.17 |
BIT 필드에 대한 MIN 집약 함수 적용 (0) | 2023.04.17 |