Я автоматически сгенерировал MVVM следующим образом, запись представляет собой текстовое поле.
namespace Something
{
using System;
using System.Collections.Generic;
public partial class ENT
{
public int ENT_SIF { get; set; }
}
Пользователь открывает главное окно ввода и нажимает кнопку вставки
namespace ENT.view
{
public partial class Ent
{
public static System.Windows.Controls.DataGrid datagrid;
private ObservableCollection<ENT> obs;
private IDocumentPaginatorSource fixedDoc;
public Entitet()
{
InitializeComponent();
Load();
}
private void Load()
{
datagrid = myDataGridEntitet;
obs = new ObservableCollection<ENTITETI>(nest.ToList());
Refresh();
}
public void Refresh()
{
datagrid.ItemsSource = obs;
}
private void insertBtn_Click(object sender, RoutedEventArgs e)
{
Insert Ipage = new Insert();
Ipage.ShowDialog();
Load();
}
}
, которая открывает окно представления вставки
namespace ENT.view
{
public partial class Insert : Window
{
public Insert()
{
InitializeComponent();
}
private void insertBtn_Click(object sender, RoutedEventArgs e)
{
HelperEnt executeInsert = new HelperEnt();
MessageBox.Show(executeInsert.InsertEnt(ent_siftextBox.Text));
this.Close();
}
}
}
Который после того, как пользователь вводит данные и нажимает Вставить, выполняет вспомогательную viewModel, которая содержит OnPropertyChanged
namespace Ent.ViewModel
{
public class HelperEnt : Notifier
{
public HelperEnt()
{ }
public string InsertEnt(string entSIF)
{
ENT newMember = new ENT()
{
ENT_SIF = Convert.ToInt32(entSIF),
};
_db.ENT.Add(newMember);
_db.SaveChanges();
// Call OnPropertyChanged whenever the property is updated
OnPropertyChanged("insertEnt");
return "OK";
}
}
Как только код входит в OnPropertyChanged, он обнаруживает PropertyChanged как NULL. Должен ли я добавить свою команду onPropertyChanged к автоматически сгенерированному значению, в котором определено свойство, или я все это делаю неправильно?
Я создал вспомогательный класс для запуска INotifyPropertyChanged
namespace Ent.ViewModeli
{
public class Notifier : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}