Как отсортировать коллекцию объектов [include] в Ria Silverlight - PullRequest
0 голосов
/ 20 марта 2012

У меня есть сетка данных с другой сеткой данных в подробностях строки, и я не могу отсортировать представление подробностей. Я пробовал следующее, но безуспешно: (

Основная сетка данных заполняется следующим образом:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    NamskeidinDomConTxt = new Namskeidin_DomainContext();

    this.NamskeidinDomConTxt.Load(this.NamskeidinDomConTxt.GetNamskeidQuery(), LoadBehavior.RefreshCurrent, loadOperation =>
        {
            PagedCollectionView pcView = new PagedCollectionView(loadOperation.Entities);
            pcView.SortDescriptions.Add(new SortDescription("Heiti", ListSortDirection.Ascending));
            namskeidDataGrid.ItemsSource = pcView;
        }, null);
}

Сетка данных в строке подробностей основной сетки данных заполняется следующим образом: сначала я перехватываю следующее событие и получаю сетку данных детали.

private void namskeidsHlutarDataGrid_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
        {
            verkefniDataGrid = (e.DetailsElement as FrameworkElement).FindName("VerkefniDataGrid") as DataGrid;
            Verkefni_DomConTxt = new Verkefni_DomainContext();
}

, а затем уровни этого событияпоэтому я могу заполнить сетку данных, когда у меня есть идентификатор:

private void namskeidsHlutarDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

    DataGrid dataGrid = sender as DataGrid;
    var item = dataGrid.SelectedItem;
    if (item != null)
    {
        nHlutaId = ((Entity)item).GetIdentity().ToString();
        Verkefni_DomConTxt.Load(Verkefni_DomConTxt.GetVerkefniQuery().Where(v => v.NamskeidsHluta_ID == nHlutaId),
        LoadBehavior.RefreshCurrent, loadOperation =>
            {
                verkefniDataGrid.ItemsSource = loadOperation.Entities;
            }, null);
    }
}


private void GridName_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
var dataGrid = (e.DetailsElement as FrameworkElement).FindName("detailsDataGrid") as DataGrid;
PagedCollectionView pcView = new PagedCollectionView(dataGrid.ItemsSource as IEnumerable);
pcView.GroupDescriptions.Clear();
pcView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
pcView.Refresh();
}

Есть три или более подробных данных / данных Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 20 марта 2012

Вы создаете новый PagedCollectionView, но ItemsSource вашего DataGrid по-прежнему привязан к простому IEnumerable. Вам нужно будет привязать ItemsSource к вашему PagedCollectionView.

Обновлено: Таким образом, основываясь на обновленном коде, вы должны просто загрузить дочернюю сетку так же, как вы загружаете родительскую сетку. Так что вместо:

Verkefni_DomConTxt.Load(Verkefni_DomConTxt.GetVerkefniQuery().Where(v => v.NamskeidsHluta_ID == nHlutaId), LoadBehavior.RefreshCurrent, 
loadOperation => { verkefniDataGrid.ItemsSource = loadOperation.Entities;}, null);

Вы можете просто создать свое представление данных здесь и установить источник элементов, указывающий на него:

Verkefni_DomConTxt.Load(Verkefni_DomConTxt.GetVerkefniQuery().Where(v => v.NamskeidsHluta_ID == nHlutaId), LoadBehavior.RefreshCurrent, 
loadOperation => {
  PagedCollectionView pcView = new PagedCollectionView(loadOperation.Entities);          
  pcView.GroupDescriptions.Clear();          
  pcView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
  verkefniDataGrid.ItemsSource = pcView;
  }, null);

А затем избавьтесь от другого события, которое пытается создать представление.

...