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;
}
我有一个包含 "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;
}