我有一个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/