WPF Entity Framework получает значение первых 2 ячеек таблицы данных, а затем изменяет значение третьей ячейки посредством привязки

Вот как выглядит мой Datagrid, я использую DataContext и CollectionViewSource для заполнения Grid.

Вот примеры кодов, которые я сделал, чтобы сделать это:

<CollectionViewSource x:Key="BeginningBalanceViewSource" d:DesignSource="{d:DesignInstance {x:Type reportModel:BeginningBalance}, CreateList=True}"/>

<DataGrid  DataContext="{Binding Source={StaticResource BeginningBalanceViewSource}}" ItemsSource="{Binding Source={StaticResource BeginningBalanceViewSource}}">
<DataGrid.Columns>
                <DataGridTemplateColumn Header="Denominations" MinWidth="130">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox BorderThickness="0" IsReadOnly="True" Text="{Binding BBDenomination, Mode=TwoWay, UpdateSourceTrigger=Explicit}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Pieces">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <controls:NumericUpDown BorderThickness="0" Minimum="0" Value="{Binding BBPieces, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Amount" MinWidth="130">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox BorderThickness="0" IsReadOnly="True" Text="{Binding BBAmount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

Вот как я изменяю свой CollectionViewSource для обновления DataContext (который я получил из MSDN):

private CollectionViewSource _beginningBalanceViewSource;
private BeginningBalance _beginningBalance;

_beginningBalanceViewSource = ((CollectionViewSource)(FindResource("BeginningBalanceViewSource")))
_beginningBalance.Source = _entities.BeginningBalances.ToList().Where(x=>x.BBDateManaged.Equals(d)).ToList();

Я отредактировал тип сущности BeginningBalance.cs (который является ObservableCollection)

    public partial class BeginningBalance : INotifyPropertyChanged
    {
        public int BBID { get; set; }
        public double BBDenomination { get; set; }
        private int pieces;
        public int BBPieces { get { return pieces; }
        set
        {
            pieces = value;
            OnPropertyChanged("BBPieces");
            OnPropertyChanged("BBAmount");
        } }
        public double BBAmount { get; set;}

        //public double BBAmount { get{ return BBDenomination * BBPieces; } } 
        //sadly, it returns an error stating that The entity type BeginningBalance is not part of the model for the current context if I ever were to do this.
        public System.DateTime BBDateManaged { get; set; }
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            var handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Если вы заметили код, я добавил INotifyPropertyChanged, чтобы немного протестировать и посмотреть, изменится ли сумма (третий столбец DataGrid) (я знаю, что я делаю, вероятно, неправильно, пожалуйста, простите мою глупость, так как мне не хватает опыта в WPF)

Все работает нормально, единственная проблема, с которой я сталкиваюсь, это то, что мне нужно только знать, как получить значение первых двух ячеек таблицы данных, а затем изменить значение третьей ячейки с помощью привязки. Первые 2 ячейки будут умножены друг на друга, затем третья ячейка получит умноженное значение автоматически, как только я изменю значение 2-й ячейки. NumericUpDownColumn - единственный доступный только для чтения, и я попытался добавить событие, и да, это как-то работает (но это немного испортило мой способ кодирования).

Должен ли я также создать ViewModelClass для начального баланса? Если мне нужно, я не знаю, как сохранить изменения по нажатию кнопки, который мой:

_entities.SaveChanges();

который будет напрямую сохранять в базу данных.

Я посмотрю на шаблон MVVM после того, как решу эту проблему.

1 ответ

Решение

Хорошо, извините за то, что я идиот, это было так же просто, как просто изменить мой

public double BBAmount { get; set;}

в

public double BBAmount { get{ return BBDenomination * BBPieces; }
            set { }
        }

Я просто забыл добавить set{} черт.

Другие вопросы по тегам