2012-08-10 2 views
1

DataGrid와 함께 WPF가 있고 그룹 행 (이 예제에서 "Name"으로)이 있습니다. 각 그룹에 대한 요약 행 ("Name"및 변환기에서 계산 한 총 "Amount")이 있습니다. 문제는 요약 행을 강제로 바인딩 업데이트해야하지만 DataTemplate에있는 한 액세스 할 수 없다는 것입니다.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> 

많은 도움을 주셔서 감사합니다.

+1

왜 당신이 "요약 행의 바인딩 업데이트를 강제 할 필요가"수행 할 때

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의 첫 번째 아이의 TotalPct 속성에 헤더를 결합? – franssu

+0

'posCurrencyOpen'는'Position'의'ObservableCollection'이고'Position'에'PropertyChanged' 이벤트를 구현했습니다. 하지만 'Amount'를 변경하면 데이터베이스가 업데이트되지만 총계는 'Amount'가 아니므로 강제로 바인딩 업데이트를하고 싶습니다. 웹에서 많은 부분을 검색했지만 사람들은 효과적으로 업데이트하지는 않지만 해결 방법은 없다고 말했습니다. – Anthony

답변

0

ICollectionView 개체에서 Refresh()를 호출해야한다고 생각합니다.

+0

고맙습니다. Refresh()와 함께 작업 한 다음 마침내 실제 솔루션을 발견했습니다. ObservableCollection에도 'PropertyChanged' 이벤트를 구현해야했습니다. – Anthony

+0

도움 주셔서 감사합니다 – Anthony

+0

환영합니다 :) – franssu

2

다음은이 문제를 해결 한 방법입니다. 날짜별로 그룹화 된 하위 개체가 포함 된 상위 개체가있었습니다. 각 어린이는 또한 할당 퍼센트 속성 (Pct)을가집니다. 나는 날짜별로 그룹화하고 관개 필드의 부분합을 표시하여 사용자가 합계를 100 %로 할 수 있도록하려고했습니다. 각 Child 개체에 TotalPct 속성을 삽입하고 Child가 동일한 날짜의 모든 Children에 대해 PropertyChanged 이벤트를 발생하도록했습니다.

<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> 
관련 문제