Реализация INotifyPropertyChanged и InotfyCollectionChanged - PullRequest
0 голосов
/ 30 ноября 2018

Я создаю настольное приложение для 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...