WPF MVVM Patern计算Datagrid行列值

时间:2015-02-18 16:48:56

标签: wpf

我想在用户添加行

时计算datagrid列值

这是我的代码

<DataGrid HorizontalAlignment="Left" ItemsSource="{Binding SaleryDetailsCollection,NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" VerticalAlignment="Top" Width="640" Height="192" LoadingRow="dataGrid_LoadingRow">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Type" Binding="{Binding Type, Mode=TwoWay, NotifyOnTargetUpdated=True, ValidatesOnDataErrors=True}" Width="*" />
            <DataGridTextColumn Header="Amount" Binding="{Binding Amount, Mode=TwoWay, NotifyOnTargetUpdated=True, ValidatesOnDataErrors=True}" Width="*" />
        </DataGrid.Columns>
    </DataGrid>

像这样的Observablecolloction

public ObservableCollection<SaleryDetailsModel> SaleryDetailsCollection
    {
        get
        {
            return _SaleryDetailsCollection; 
        }
        set
        {
             SalaryTotal = value.Sum(x => x.Amount);
            _SaleryDetailsCollection = value;
            NotifyPropertyChanged("SaleryDetailsCollection");
        }
    }

此处金额列的总和不是SalaryTotal上的calclulat

1 个答案:

答案 0 :(得分:0)

当您从ObservableCollection添加和删除行时,它实际上并未更改Collection实例,因此您的代码无法运行。名为CollectionChanged的集合上有一个事件,当您添加或删除要挂钩的行时,该事件会被引发。您应该可以在那里重新计算总数。在实际添加/删除行的事件中进行数学计算可能更容易。

如果SalaryTotal是您还具有约束力的属性,则可能还需要在重新计算后调用NotifyPropertyChanged("SalaryTotal ");以获取用户界面以查看更改(如果尚未在您的属性设置器中完成)