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