Я создаю настольное приложение для Windows, используя WPF и C #.Я пытаюсь использовать модель MVVM, но не могу разобраться с моделью и интерфейсами INotifyPropertyChanged
и INotifyCollectionChanged
.
Я подробно описываю структуру моей модели ниже, упростил ее допоставь мой вопросМодель одного класса.Я получаю сделки из внешней системы и вставляю их в базу данных.После того, как я вставил их в базу данных, я хотел бы, чтобы страница, показывающая сделки, обновлялась с новыми сделками.
Где и как мне реализовать интерфейсы INotifyPropertyChanged
и INotifyCollectionChanged
?Моя модель выглядит примерно так: Page -> View -> ViewModel <- Model.</p>
Если это не ясно, я могу предоставить больше информации.
// ---Model--
public class Trade
{
private decimal tradeid;
private decimal securityid;
public Trade () {}
// <<public get-set properties for the above 2 items>>
}
// ---ViewModel--
public class TradeVM
{
private ObservableCollection<Trade> _tradeList;
public ObservableCollection<Trades> TradeList
{
get
{
//getting all rows from database
_tradeList = new ObservableCollection<TradesDB>(GetAllRows<Trades>(typeof(Trades)).ToList());
}
set
{
_tradeList = value;
}
}
public TradesVM() {}
}
// ---View---
public class TradeView
{
private TradeVM _tradeVM;
public TradeView()
{
_tradeVM = new TradeVM;
}
public void GetTradesFromExternalSystem()
{
//call the webservice of externsal system and get the trades and insert them in the database.
}
public Ilist<Trade> GetTradesFromDatabase()
{
return _tradeVM.TradeList.ToList();
}
}
// ---Page Class displaying Trades to user---
public partial class TradeData : Page
{
private TradeView _tradeView;
public TradeData()
{
InitializeComponent();
_tradeView = new TradeView();
//datagrid datacontext assignment
this.dgTrades.Datacontext = _tradeView.GetTradesFromDatabase().ToList();
}
private void cmdGetTrades_Click(object sender, RoutedEventArgs e)
{
_tradeView.GetTradesFromExternalSystem();
}
}
// ---Page---
// --just putting the datagrid population line. rest all is default
<igDP:XamDataGrid Name="dgTrades" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" DataSource="{Binding}" MaxHeight="800"></igDP>