Идиоматическая сортировка по умолчанию с использованием WCF RIA, Entity Framework 4, Silverlight 4? - PullRequest
1 голос
/ 25 марта 2010

У меня есть два комбинированных окна Silverlight 4.0; вторая отображает дочерние элементы сущности, выбранной в первой:

<ComboBox 
    Name="cmbThings"
    ItemsSource="{Binding Path=Things,Mode=TwoWay}"
    DisplayMemberPath="Name"
    SelectionChanged="CmbThingsSelectionChanged" />
<ComboBox 
    Name="cmbChildThings"
    ItemsSource="{Binding Path=SelectedThing.ChildThings,Mode=TwoWay}"
    DisplayMemberPath="Name" />

Код за представлением предоставляет (простой, хакерский) способ привязки данных этих ComboBox'ов путем загрузки сущностей Entity Framework 4.0 через службу RIA WCF:

public EntitySet<Thing> Things { get; private set; }
public Thing SelectedThing { get; private set; }

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var context = new SortingDomainContext();
    context.Load(context.GetThingsQuery());
    context.Load(context.GetChildThingsQuery());
    Things = context.Things;            
    DataContext = this;
}

private void CmbThingsSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    SelectedThing = (Thing) cmbThings.SelectedItem;
    if (PropertyChanged != null)
    {
        PropertyChanged.Invoke(this, new PropertyChangedEventArgs("SelectedThing"));
    }
}

public event PropertyChangedEventHandler PropertyChanged;

Я хотел бы, чтобы оба поля со списком сортировали их содержимое в алфавитном порядке, и я бы хотел указать это поведение в XAML, если это вообще возможно.

Может, кто-нибудь подскажет, как это можно сделать с технологическим стеком SL4 / EF4 / WCF RIA?

1 Ответ

0 голосов
/ 25 марта 2010

Попробуйте использовать CollectionViewSource и привяжите это к вашему списку. CollectionViewSource обеспечивает сортировку, группировку и фильтрацию.

В качестве источника для вашего CollectionViewSource установите свой EntitySet. CollectionViewSource можно добавить в раздел ресурсов любого элемента управления.

<CollectionViewSource Source="{StaticResource Things}" x:Key="cvs"> <!--The source can be set in procedural code-->
  <CollectionViewSource.SortDescriptions>
    <scm:SortDescription PropertyName="Name"/> <!--The name of the property to sort items-->
  </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

<!--The prefix scm mappes to the System.ComponentModel-->

Я не проверял это, но оно должно работать. Свойство Source объекта CollectionViewSource имеет тип объекта. Не знаю, должен ли этот объект реализовывать указанный интерфейс, такой как IEnumerable.

...