I used to sort and select data of ObservableCollection
object like:
public class MainViewModel : INotifyPropertyChanged
{
private ObservableCollection<Module> myModulesList;
private void RefreshModulesByOrder()
{
myModulesList = new ObservableCollection<Module>(sdb.GetOrderModules().OrderBy(mod => mod.Address));
ModulesView = CollectionViewSource.GetDefaultView(myModulesList);
ModulesView.Filter = obj =>
{
var Module = (Module)obj;
return SelectedProduct != null && SelectedProduct.ModelNumber == Module.ModelNumber;
};
}
private DataSet _ds;
private void RefreshModules()
{
_ds = sdb.GetModules();
_ds.Tables["Modules"].DefaultView.Sort = "Address";
ModulesView = new ListCollectionView(_ds.Tables["Modules"].DefaultView)
{
Filter = obj =>
{
var Module = obj as DataRowView;
return SelectedProduct != null && SelectedProduct.ModelNumber == Module["ModelNumber"].ToString();
}
};
}
public ushort[] DatagridToArray()
{
return _ds.Tables["Modules"].AsEnumerable().Select(mod => mod.Field<UInt16>("ParamValue")).ToArray();
}
private Product selectedProduct;
public Product SelectedProduct
{
get { return selectedProduct; }
set
{
if (selectedProduct != value)
{
selectedProduct = value;
NotifyPropertyChanged();
RefreshProductList();
RefreshModules();
RefreshCommunication();
}
}
}
}