У меня есть класс Post_zakaz
public class Post_zakaz
{
public Post_zakaz(int kod_t, string nazv_t, int kod_r, string nazv_r, double kol, double cena_ed)
{
this.kod_t = kod_t;
this.nazv_t = nazv_t;
this.kod_r = kod_r;
this.nazv_r = nazv_r;
this.kol = kol;
this.cena_ed = cena_ed;
this.obsh = kol * cena_ed;
}
public int index { get; set; }
public int kod_t { get; set; }
public string nazv_t { get; set; }
public int kod_r { get; set; }
public string nazv_r { get; set; }
public double kol { get; set; }
public double cena_ed { get; set; }
public double obsh { get; set; }
}
Есть переменная для хранения значений, полученных из базы:
public static ObservableCollection<Post_zakaz> postzakazis = new ObservableCollection<Post_zakaz>();
Далее есть DataGrid с привязкой к коллекции:
<DataGrid Name="Grid" Grid.Row="1" ItemsSource="{Binding Mode=OneWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="№"></DataGridTextColumn>
<DataGridTextColumn Header="Товар" Width="*" IsReadOnly="True" Binding="{Binding Path=nazv_t}"></DataGridTextColumn>
<DataGridTextColumn Header="Разновидность" Width="*" IsReadOnly="True" Binding="{Binding Path=nazv_r}"></DataGridTextColumn>
<DataGridTextColumn Header="Количество" Width="*" Binding="{Binding Path=kol}" ></DataGridTextColumn>
<DataGridTextColumn Header="Цена за ед" Width="*" Binding="{Binding Path=cena_ed}"></DataGridTextColumn>
<DataGridTextColumn Header="Общая сумма" Width="*" Binding="{Binding Path=obsh}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
В столбце "Общая сумма" при изменении одного из полей "Количество" или "Цена за ед" должен происходить перерасчет "Общей суммы". Сейчас она рассчитывается только при заполнении, т.к. поле obsh из класса Post_zakaz присваивается один раз.
Я так поняла, что нужно реализовывать INotifyPropertyChanged для класса? Пока я от этого далека, но пытаюсь понять.
Как правильно реализовать данную идею? Возможно как-то можно изменять столбец в самом DataGrid?
DataGrid. Забудьте вообще про интерфейс, его задача только отобразить, не более. Работайте непосредственно с классомPost_zakaz, это его задача посчитать сумму и задать ее в нужное свойство. – EvgeniyZ Mar 17 '20 at 12:32Header="Общая сумма" Width="*" Binding="{Binding Path=obsh}", вам остается лишь обновить ему значение и чтобы данные обновились в View, реализовать этому свойству INPC – EvgeniyZ Mar 17 '20 at 12:36obsh(кстати, очень странные названия) то значение, которое вам надо, и все, интерфейс не трогаете, нечего другого не трогаете. Про другие ваши ошибки я говорить сейчас не буду, это я думаю вы сами поймете со временем. Сейчас главное поймите саму суть WPF. – EvgeniyZ Mar 17 '20 at 14:29