GridCell中的NumericUpDown - WPF

时间:2016-12-27 12:49:28

标签: c# .net wpf mvvm mahapps.metro

我有一个带有“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);
}

public class ItemPresupuesto: EntidadBase

    {

        public decimal Cantidad { get; set; }

    }

public class Presupuesto : EntidadBase
{

    public virtual List<ItemPresupuesto> Items { get; }

}

1 个答案:

答案 0 :(得分:3)

ItemPresupuesto类应该实现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;
}