Tuesday, February 18, 2014

Monday, February 17, 2014

Update UI from ViewModel for INotifyCollectionChanged and INotifyPropertyChanged

Please see the example of loading trades data using ObservableCollection (which implements INotifyCollectionChanged) and reflecting updates in UI data grid automatically when trades are replaced with new trades here http://wpfgrid.blogspot.com/2014/02/simple-observablecollection-wpf-mvvm.html

Then please see how we have updated "Trade" class so that it implements INotifyPropertyChanged  interface here http://wpfgrid.blogspot.com/2014/02/inotifypropertychanged-implementation.html

Now if we replace the codes in the LoadTradeCommand's Execute method on fist example (top) with the following codes so that instead of every two seconds replacing with new trades data, it just updates the quantity and market price of the first time loaded trades every two seconds.

public void Execute(object parameter)
            var loadedTrades = parameter as ObservableCollection<Trade>;
            if (loadedTrades != null)
                TaskFactory taskfac = new TaskFactory();
                taskfac.StartNew(() =>
                        while (true)
                            var tradelist = Trades.LoadTradesFromDataSource();
                            App.Current.Dispatcher.Invoke(new Action(() =>
                                if (loadedTrades.Count == 0) // load only first time
                                    foreach (var trade in tradelist)
                                    var mktpricetmp = DateTime.Now.Second; // just to get 
                                                                              some number

                                    var qtytmp = (DateTime.Now.Second + 5) * 1000; // just 
                                                                          to get some number

                                    foreach (var trade in loadedTrades)


                                        trade.Qty = qtytmp.ToString();

                                        trade.MktPrice = mktpricetmp.ToString();




Now this will as well update data grid automatically as the trades data in the ObservableCollection are being updated.