2017-02-23 83 views
1

我已將Observable Collection綁定到MVVM-light VM中的infragistics的xamDataGrid。在UI中,我有我的網格和一個按鈕,當我點擊按鈕時,我想執行更新信息的操作。此操作需要很長時間,我希望數據按照GUI上顯示的順序進行更新。然而,Observable集合沒有排序,而是始終在未排序列表上更新。有沒有辦法在我的VM中獲得排序列表?在MVVM光源中獲取已排序的可觀察集合

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 
         } 
        }); 
       } 
      )); 
     } 
    } 
} 

}

查看:

<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

嘗試尋找這裏 - HTTP: //stackoverflow.com/questions/16956251/sort-a-wpf-datagrid-programmatically –

+0

這是相反的方式。他們想要在他們的vm中調整他們的GUI。我希望我的虛擬機中的集合根據我的GUI中發生的更改進行更新。除非我完全錯過了這裏的東西。 –

回答

0

網格不排序的實際源集合,它按它的觀點。

如果你希望能夠得到它們出現在UI的順序選擇項目,你可以綁定到ICollectionView屬性:

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

我這樣實現它,但它仍然不給我排序的集合。也許這可能與infragistics有關? –

+0

當您列舉View.OfType 時,您的意思是Site對象的順序不正確? – mm8

+1

Jus發現我的問題。這確實是偏重於特定的。 xamdatagrid默認不使用collectionview! http://help.infragistics.com/Help/Doc/WPF/2012.2/CLR4.0/html/xamDataGrid_External_Sorting.html 感謝您的幫助! –