0
私は合計サマリーを持つグリッドを持っています。新しい行が入力されたときに更新されます。しかし、新しい行や既存の行でセルが変更されると、それらを更新したい。私はいくつかの記事を読んで、セルの変更イベントを処理し、グリッド上でUpdateTotalSummaryメソッドを実行するとそのトリックが実行されると判断しましたが、そうではありません。以下は私が使用しているコードで、コードがデバッグによってヒットしていることを確認しました。すべてのヘルプは大歓迎です。更新方法WPF DataGridセルが変更されたときの合計サマリー?
<Grid DataContext="{Binding Source={StaticResource VM}}">
<Grid.Resources>
<local:TotalSumConverter x:Key="sumConverter" />
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<DataGrid x:Name="myGrid" AutoGenerateColumns="False" ItemsSource="{Binding TrsFundDocItems,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Amount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Header="Amount"/>
<DataGridTextColumn Binding="{Binding FCAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Header="FCAmount"/>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.RowSpan="2">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid Grid.Row="1" Grid.Column="1" Margin="8">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="SumTotal :" Grid.Row="0" Grid.Column="0"/>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding ItemsSource, ConverterParameter=Amount, Converter={StaticResource sumConverter}, ElementName=myGrid, FallbackValue=0, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Grid>
</Grid>
は、これは私のビューモデルである:
public class WindowxViewModel : INotifyPropertyChanged
{
public WindowxViewModel()
{
TrsFundDocItems = new ObservableCollection<TrsFundDocItem> { new TrsFundDocItem { Amount = 10, FCAmount = 1 }, new TrsFundDocItem { Amount = 5, FCAmount = 8 } };
}
private ObservableCollection<TrsFundDocItem> _TrsFundDocItems;
public ObservableCollection<TrsFundDocItem> TrsFundDocItems
{
get { return _TrsFundDocItems; }
set
{
if (_TrsFundDocItems == value) return;
_TrsFundDocItems = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(TrsFundDocItems)));
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
}
コンバータ:
////////////////
public class TotalSumConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var users = value as IEnumerable<object>;
if (users == null)
return "$0.00";
double sum = 0;
foreach (var u in users)
{
sum += ((TrsFundDocItem)u).Amount;
}
return sum.ToString("c");
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return 0;
}
}
エンティティ:編集時に
public class TrsFundDocItem:INotifyPropertyChanged
{
//public double Amount { get; set; }
private double amount;
public double Amount
{
get { return amount; }
set {
if (amount == value) return;
amount = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(Amount)));
}
}
public double FCAmount { get; set; }
public event PropertyChangedEventHandler PropertyChanged=delegate { };
}
任意の値が変更された場合。合計の合計は何に設定されていますか?ちょうど私たちの行動を説明してください。同様の値はまったく変化しないか、他の値に変更されます –
私は総要約のグリッドを持っています。新しい行が入力されたときに更新されます。しかし、私は、セルが新しい行または既存の行で変更されたときにそれらを更新したい –