我有一个带有DataGrid的WPF,我对行进行分组(在示例中为“Name”)。我有一个每个组的摘要行(“名称”和我在转换器中计算的总数“金额”)。 问题是我需要强制对摘要行进行绑定更新,但我无法在DataTemplate中访问它。
<DataGrid ItemsSource="{Binding Source={StaticResource posCurrencyOpen}}">
<DataGrid.Columns>
<DataGridTextColumn Header="Amount" Binding="{Binding Amount, Converter {StaticResource Amount_Converter}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<DataGridCell Content="{Binding Path=Name}"/>
<DataGridCell Content="{Binding Path=Items, Converter={StaticResource AmountGroup_Converter}, Mode=OneWay}"/>
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
非常感谢你的帮助。
答案 0 :(得分:2)
以下是我如何处理它:我有一个Parent对象,其中包含按日期分组的Child对象。每个孩子也有一个分配百分比属性(Pct)。我想按日期分组并显示Pct字段的小计,以便用户可以确保它们总计达到100%。我在每个Child对象上插入了一个TotalPct属性,然后强制Child为所有具有相同日期的子项触发PropertyChanged事件。
public partial class Child: INotifyPropertyChanged
{
public double TotalPct
{
get
{
double ttl = 0;
if (Parent != null)
{
var peers = from d in Parent.Children where d.StartDate == StartDate select d;
foreach (Child dtl in peers)
{
ttl += dtl.Pct;
}
}
return ttl;
}
}
partial void OnPctChanged()
{
if (Parent != null)
{
var peers = from d in Parent.Children where d.StartDate == StartDate select d;
foreach (Child dtl in peers)
{
NotifyPropertyChanged("TotalPct");
}
}
}
然后我的GroupStyle将标题绑定到itemcollection中第一个Child的TotalPct属性:
<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<cust:DataGrouper>
<cust:DataGrouper.Header>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=Name, StringFormat='MM/dd//yyyy'}"
Width="{Binding ElementName=detailsDataGrid, Path=Columns[0].ActualWidth}"/>
<TextBlock Text="" Width="{Binding ElementName=detailsDataGrid, Path=Columns[1].ActualWidth}" Margin="-20,0,0,0"/>
<TextBlock Text="" Width="{Binding ElementName=detailsDataGrid, Path=Columns[2].ActualWidth}" />
<TextBlock Text="{Binding Path=Items[0].TotalPct, Converter={StaticResource percentStringToDouble}, ConverterParameter=2}" HorizontalAlignment="Right"
Width="{Binding ElementName=detailsDataGrid, Path=Columns[3].ActualWidth}"/>
</StackPanel>
</cust:DataGrouper.Header>
<ItemsPresenter />
</cust:DataGrouper>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 1 :(得分:0)
我认为您需要在ICollectionView对象上调用Refresh()。