The following link contains some nifty Rx example codes someone has put in that site.
http://rxwiki.wikidot.com/101samples
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.
Now this will as well update data grid automatically as the trades data in the ObservableCollection are being updated.
Codes:
https://skydrive.live.com/#cid=BA4BC1E3D681B9B3&id=BA4BC1E3D681B9B3!112
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)
loadedTrades.Add(trade);
}
else
{
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();
}
}
}));
Thread.Sleep(2000);
}
});
}
Now this will as well update data grid automatically as the trades data in the ObservableCollection are being updated.
Codes:
https://skydrive.live.com/#cid=BA4BC1E3D681B9B3&id=BA4BC1E3D681B9B3!112
Subscribe to:
Posts (Atom)