2017-02-23 8 views
1

MVVMライトVMのinfragisticsのxamDataGridにObservable Collectionをバインドしました。 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を調整したい。私は私のVMのコレクションが私の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

私はこれをこのように実装しましたが、ソートされたコレクションはまだ得られません。おそらく、これはインフラジスティックスに関連するかもしれませんか? –

+0

View.OfType を列挙するときに、Siteオブジェクトが正しい順序でないことを意味しますか? – mm8

+1

Jusさんが私の問題を発見しました。それは確かにInfragistics特有のものでした。 xamdatagridはデフォルトでコレクションビューを使用しません! http://help.infragistics.com/Help/Doc/WPF/2012.2/CLR4.0/html/xamDataGrid_External_Sorting.html ありがとうございました! –

関連する問題