2016-12-27 36 views
1

は、私が「ItemPresupusto」のコレクションを持つグリッドを持っています。各 "ItemPresupuesto"の "Cantidad"プロパティを変更できるようにNumericUpDown(mahAppsによる)を追加する必要があり、そのプロパティを変更するたびにUIのデータを更新する必要があります。私はすべてを試しましたが、私はそれをすることはできません。 MVVM Lightを使用します。ありがとうございました! ItemPresupuestoクラスはINotifyPropertyChangedのとインターフェイスを実装しているソースプロパティの変更通知を上げる必要があるNumericUpDownを - WPF

の.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> 

のViewModel

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

「実行できません」と正確には何ですか? – mm8

+0

@ mm8こんにちは!NumericUpDownの値を変更したときにUIを更新する必要があります – avechuche

+0

この場合「UI」は何を意味しますか?つまり、どのようなコントロールを更新する必要がありますか? – mm8

答えて

3

ボー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; 
} 
関連する問題