WPF DataGrid 计算总计列

WPF DataGrid calculated Total column

我有一个 DataGrid 可以为销售屏幕输入项目 /price/Quantity,我需要一个小计列,价格 * 数量,我不知道当用户离开价格时如何计算小计列或数量列。这是我的 xaml

标题

<DataGrid ItemsSource="{Binding Path=Datos,Mode=TwoWay,NotifyOnSourceUpdated=True}" 
          SelectedItem="{Binding Dato,Mode=TwoWay,NotifyOnSourceUpdated=True}" 
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Description" Binding="{ Binding Path=Descripcion}"></DataGridTextColumn>
        <DataGridTextColumn Header="Price" Binding="{ Binding Path=Precio,UpdateSourceTrigger=PropertyChanged}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Quantity" Binding="{ Binding Path=Cant,UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
        <DataGridTextColumn Header="Total" Binding="{ Binding Path=Total,UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

我的 ViewModel 是这样的:

 public class VM : VMBase
    {
        public VM()
        {

            Datos.Add(new CDato() { Descripcion = "item 1", Precio = 2.5m, Cant = 3m, Total = 7.5m });
            Datos.Add(new CDato() { Descripcion = "item 2", Precio = 5m, Cant = 2m, Total = 10m });
        }

        private ObservableCollection<CDato> _datos;

        public ObservableCollection<CDato> Datos
        {
            get
            {
                if (_datos == null)
                    _datos = new ObservableCollection<CDato>();
                return _datos;
            }
            set
            {
                _datos = value;
                RaisePropertyChanged();
            }
        }
        public void Calcular()
        {
            if (Dato != null)
            {
                Dato.Total = Dato.Precio * Dato.Cant;
                RaisePropertyChanged("Dato");
                RaisePropertyChanged("Datos");
            }
        }
        private CDato dato;

        public CDato Dato
        {
            get { return dato; }
            set
            {
                dato = value;
                RaisePropertyChanged();
            }
        }
    }

    public class CDato
    {
        public string Descripcion { get; set; }
        public decimal Precio { get; set; }
        public decimal Cant { get; set; }
        public decimal Total { get; set; }

    }

当用户更改单元格 "Precio"(价格)或 "Cant"(数量)时,必须使用此公式计算 "Total" 列 Tota = Precio * Cant

我找不到关于此的样本。

你能帮我解决这个问题吗?

非常感谢

您可以通过在道具中添加 RaisePropertyChanged( "Total" ) 来创建它,用于计算 Total 属性。我创建了一些示例来解释如何操作。

<DataGrid ItemsSource="{Binding Objects}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Width="100" Binding="{Binding Price, UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTextColumn Width="100" Binding="{Binding Total}" />
    </DataGrid.Columns>
</DataGrid>

还有 viewModel 道具。

private int _price;
public int Price
{
    get { return _price; }
    set { _price = value; RaisePropertyChanged( "Price" ); RaisePropertyChanged( "Total" ); }
}

public int Total
{
    get { return _price * 2; }
}

更新 根据评论。有必要为 CDato class(或从 VMBase 派生)实现 NotifyPropertyChanged 并为其道具添加 RaisePropertyChanged