wpf - WPF DataGrid计算的总计列

标签 wpf mvvm datagrid editing

我有一个DataGrid可以在销售屏幕中输入商品/price/Quantity,并且我需要一个subTotal列(价格*数量),而且当用户离开“价格”或“数量”列时,我不知道如何计算subTotal列。这是我的xml

标题

<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”(数量)时,“总计”列必须使用以下公式计算:Tota = Precio * Cant

我找不到有关此的样本。

你能帮我吗?

很多东西

最佳答案

您可以通过将RaisePropertyChanged( "Total" )添加到 Prop (用于计算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 Prop 。
private int _price;
public int Price
{
    get { return _price; }
    set { _price = value; RaisePropertyChanged( "Price" ); RaisePropertyChanged( "Total" ); }
}

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

更新
根据评论。必须为NotifyPropertyChanged类实现CDato(或从VMBase派生它)并为其属性添加RaisePropertyChanged

关于wpf - WPF DataGrid计算的总计列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34148551/

相关文章:

c# - 无需魔术弦即可分离屏幕

wpf - 使用 SQLite 和 Entity Framework 进行数据绑定(bind)

c# - 使用roslyn编译Xaml得到*.g.cs文件

c# - DateTimePicker 日历默认为上次选择的月份/年份

c# - Datagrid 组合框使 relativsource 工作

WPF 数据网格组合框数据绑定(bind)

apache-flex - 在 datagrid flex 中创建一个 "total"列

wpf - OxyPlot 图表中的可绑定(bind)注释

WPF 按钮动画

c# - 用于 ironPython 脚本的 AvalonEdit?