GridCell 中的 NumericUpDown - WPF

NumericUpDown in GridCell - WPF

我有一个包含 "ItemPresupusto" 集合的网格。我需要添加一个 NumericUpDown(由 mahApps 提供)以便能够修改每个 "ItemPresupuesto" 的 "Cantidad" 属性,并且每次修改 属性 时,我都需要更新数据在 UI。我已经尝试了一切,但我做不到。我使用 MVVM Light 一些帮助。谢谢!

.XAML

<DataGrid IsReadOnly="True"
          SelectionUnit="FullRow"
          AutoGenerateColumns="False"
          GridLinesVisibility="Horizontal"
          ItemsSource="{Binding Articulos}">
            <DataGrid.Columns>
                    <DataGridTemplateColumn Header="Cantidad" MinWidth="100">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <mahApps:NumericUpDown Minimum="1"
                                IsTabStop="False"
                                Value="{Binding Cantidad, UpdateSourceTrigger=PropertyChanged}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
</DataGrid>

视图模型

public class PresupuestosViewModel : ViewModelBase
{
     public IEnumerable<ItemPresupuesto> Articulos => new ObservableCollection<ItemPresupuesto>(Presupuesto.Items);
}

Class

public class ItemPresupuesto: EntidadBase

    {

        public decimal Cantidad { get; set; }

    }

public class Presupuesto : EntidadBase
{

    public virtual List<ItemPresupuesto> Items { get; }

}

ItemPresupuesto class 应该实现 INotifyPropertyChanged 和接口,并为绑定到要刷新的控件的源 属性 发出更改通知,只要设置了 Cantidad 或 Prico 属性:

public class ItemPresupuesto : INotifyPropertyChanged
{
    private decimal _cantidad;
    public decimal Cantidad
    {
        get { return _cantidad; }
        set { _cantidad = value; NotifyPropertyChanged(); NotifyPropertyChanged(nameof(Total)); }
    }

    private decimal _prico = 1;
    public decimal Prico
    {
        get { return _prico; }
        set { _prico = value; NotifyPropertyChanged(); NotifyPropertyChanged(nameof(Total)); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public decimal Total => _prico * _cantidad;
}