2017-02-23 8 views
1

Ich habe eine Observable Collection an ein XamDataGrid von Infragistics in meiner MVVM-Light VM gebunden. In der Benutzeroberfläche habe ich mein Raster und eine Schaltfläche und wenn ich auf die Schaltfläche klicke, möchte ich eine Aktion durchführen, die Informationen aktualisiert. Diese Aktion dauert eine ganze Weile und ich möchte, dass die Daten in der auf der GUI angezeigten Reihenfolge aktualisiert werden. Die Observable-Sammlung ist jedoch nicht sortiert und wird stattdessen immer in der unsortierten Liste aktualisiert. Gibt es eine Möglichkeit, die sortierte Liste in meiner VM zu erhalten?Erhalten sortierte beobachtbare Sammlung in mvvm Licht

VM:

public class SystemInformation : ViewModelBase 
{ 
    private ObservableCollection<Site> _activeSites; 

    private RelayCommand _updateAllCommand; 

    /// <summary> 
    /// Initializes a new instance of the SystemInformation class. 
    /// </summary> 
    public SystemInformation() : base() 
    { 
     ActiveSites = new ObservableCollection<Site>(); 
    } 


    public ObservableCollection<Site> ActiveSites 
    { 
     get 
     { 
      return _activeSites; 
     } 
     set 
     { 
      Set("ActiveSites", ref _activeSites, value); 
     } 
    } 

    public RelayCommand UpdateAllCommand 
    { 
     get 
     { 
      return _updateAllCommand 
       ?? (_updateAllCommand= new RelayCommand(
       () => 
       { 
         try 
         { 
          foreach (var site in ActiveSites) 
          { 
          // Update data 
          } 
         } 
         catch (Exception ex) 
         { 
          //Exception handling 
         } 
        }); 
       } 
      )); 
     } 
    } 
} 

}

Ausblick:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="5"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="5"/> 
     <RowDefinition Height="auto"/> 
     <RowDefinition Height="5"/> 
    </Grid.RowDefinitions> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="5"/> 
     <ColumnDefinition Width="auto"/> 
     <ColumnDefinition Width="5"/> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="5"/> 
    </Grid.ColumnDefinitions> 

    <igDP:XamDataGrid x:Name="grdSysinfo" Grid.Row="1" Grid.Column="3" DataSource="{Binding ActiveSites, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }" /> 
    <Button Command="{Binding UpdateAllCommand}" CommandParameter="All" Grid.Row="3" Grid.Column="1">Load All</Button> 
</Grid> 
+0

versuchen hier suchen - http: //stackoverflow.com/questions/16956251/sort-a-wpf-datagrid-programmatically –

+0

Das ist anders herum. Sie möchten ihre GUI in ihrer VM anpassen. Ich möchte, dass die Sammlung in meiner VM entsprechend den Änderungen in meiner GUI aktualisiert wird. Es sei denn, ich vermisse hier etwas völlig. –

Antwort

0

Das Gitter nicht die eigentliche Quelle Sammlung nicht sortieren, sortiert sie einen Blick auf sie.

Wenn Sie in der Lage sein wollen, die Elemente in der Reihenfolge zu bekommen, dass sie in der Benutzeroberfläche angezeigt werden, Sie auf ein ICollectionView Eigenschaft binden könnte:

public class SystemInformation : ViewModelBase 
{ 
    private ObservableCollection<Site> _activeSites; 
    private RelayCommand _updateAllCommand; 

    public SystemInformation() : base() 
    { 
     ActiveSites = new ObservableCollection<Site>(); 
     View = CollectionViewSource.GetDefaultView(ActiveSites); 
    } 

    public System.ComponentModel.ICollectionView View { get; private set; } //<-- bind to this one 

    public ObservableCollection<Site> ActiveSites 
    { 
     get 
     { 
      return _activeSites; 
     } 
     set 
     { 
      Set("ActiveSites", ref _activeSites, value); 
     } 
    } 

    public RelayCommand UpdateAllCommand 
    { 
     get 
     { 
      return _updateAllCommand 
       ?? (_updateAllCommand = new RelayCommand(() => 
       { 
        foreach (var site in View.OfType<Site>()) 
        { 
         //--- 
        } 
       })); 
     } 
    } 
} 

<igDP:XamDataGrid ... DataSource="{Binding View}" /> 
+0

Ich habe es so implementiert, aber es gibt mir immer noch nicht die sortierte Sammlung. Vielleicht ist das infragistisch? –

+0

Meinst du, die Site-Objekte sind nicht in der richtigen Reihenfolge, wenn Sie View.OfType auflisten? – mm8

+1

Jus hat mein Problem gefunden. Es war in der Tat infragistisch. Das Xamdatagrid verwendet standardmäßig nicht die Sammlungsansicht! http://help.infragistics.com/Help/Doc/WPF/2012.2/CLR4.0/html/xamDataGrid_External_Sorting.html Danke für die Hilfe! –

Verwandte Themen