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;
    }

Ответы (0 шт):