WPF Вызов метода при изменения данных в контролах (datagrid и textbox)
У меня есть один DataGrid (с привязанным списком) и два textbox'а. Нужно чтобы при изменении содержимого ячеек и добавления/удаления элементов datagrid'а, а также при заполнении textbox'а (с привязанной переменной Modificator)вызывался определённый метод, автоматически изменяющий значения элементов DataGrid и TextBox. Пока что это всё выполняет кнопка.
Пытался сделать через INotifyPropertyChanged - не получилось. Как можно правильно реализовать это?
XAML:
<DataGrid x:Name="ResDG" Loaded="ResDG_Loaded" Width="292" HorizontalAlignment="Left" AutoGenerateColumns="False" Margin="101,59,0,208">
<DataGrid.Columns>
<DataGridTextColumn Header="Название" Binding="{Binding Name}" Width="48*" />
<DataGridTextColumn Header="Доход" Binding="{Binding Income}" Width="50*"/>
<DataGridTextColumn Header="Итого" Binding="{Binding TotalIncome, UpdateSourceTrigger=PropertyChanged}" Width="50*"/>
</DataGrid.Columns>
</DataGrid>
<TextBox Text="{Binding Modificator}" HorizontalAlignment="Left" Height="23" Margin="454,75,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
<TextBox Text="{Binding Total}" HorizontalAlignment="Left" Margin="500,201,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="74"/>
<TextBlock HorizontalAlignment="Left" Margin="440,201,0,0" TextWrapping="Wrap" Text="Всего:" VerticalAlignment="Top"/>
<Button Content="Кнопка" Click="ClickToCalc" HorizontalAlignment="Left" Margin="677,131,0,0" VerticalAlignment="Top" Width="75"/>
Класс, содержащий в себе список и основные переменные.
public class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private List<ListModel> _users;
public List<ListModel> Users
{
get { return _users; }
set { _users = value; OnPropertyChanged(); }
}
private int _Modificator;
public int Modificator
{
get { return _Modificator; }
set
{
if (_Modificator != value)
{
_Modificator = value;
OnPropertyChanged();
}
}
}
private int _Total;
public int Total
{
get { return _Total; }
set { _Total = value; OnPropertyChanged("Total"); }
}
}
Метод Calculate, вместе с датаконтекстом MainWindow
private Model GetModel;
public MainWindow()
{
InitializeComponent();
GetModel = new Model();
DataContext = GetModel;
}
private void ClickToCalc(object sender, RoutedEventArgs e)
{
Calculate();
}
public void Calculate()
{
int IncomeSum = 0;
for (int i = 0; i < GetHlam.Users.Count; i++)
{
GetModel.Users[i].TotalIncome = GetModel.Users[i].Income * 2;
IncomeSum += GetModel.Users[i].TotalIncome;
ResDG.ItemsSource = null;
ResDG.ItemsSource = GetModel.Users;
}
GetModel.Total = IncomeSum * GetModel.Modificator;
}