2016-07-07 7 views
3

ItemsControl이 있는데, 이는 뷰 모델의 속성에 바인딩 된 CollectionViewSource에 바인딩되어 있습니다.컬렉션 변경시 GroupStyle 헤더의 바인딩이 업데이트되지 않습니다.

<GroupStyle HeaderTemplate="{StaticResource TotalDurationTemplate}" /> 

TotalDurationTemplate이다 :

<DataTemplate x:Key="TotalDurationTemplate"> 
    <Border BorderBrush="Black" BorderThickness="0 1" Background="#EEE"> 
     <Grid> 
      <TextBlock HorizontalAlignment="Center" 
              FontSize="18" FontWeight="Bold" 
              Text="{Binding Path=Items[0].Start, Converter={StaticResource DateTimeFormatConverter}, ConverterParameter='ddd dd/MM'}" /> 
      <TextBlock Margin="10 0" HorizontalAlignment="Right" VerticalAlignment="Center" 
              FontSize="16" Foreground="#9000" 
              Text="{Binding Items, Converter={StaticResource TotalDurationConverter}}" /> 
     </Grid> 
    </Border> 
</DataTemplate> 

문제는 제 TextBlock (Items에 결합 된 하나) 인 것을 다시되지

ItemsControl이 닮은 GroupStyle 세트를 갖는다 - 새 항목이보기 모델의 컬렉션 (ObservableCollection<>)에 추가되면 평가됩니다. 항목이 ListView에 올바른 그룹으로 추가되었지만 총 지속 시간 값은 업데이트되지 않습니다.

총 비행 시간에 대한 변환기는 다음과 같습니다

public class TotalDurationConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return 
      ((IEnumerable<object>)value) 
       .Select(x => ((RecentTimingViewModel)x).Duration) 
       .Aggregate((v1, v2) => v1 + v2) 
       .TotalHours 
       .ToString("F2") + "h"; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new InvalidOperationException(); 
    } 
} 

가 어떻게 결합 새로 고침보기 모델의 항목이 변경되었는지 확인 할 때 올바르게?

편집 : 솔루션

내가 수락 답변에서 솔루션이 가져다 내 코드에 넣어.

<DataTemplate x:Key="TotalDurationTemplate"> 
    <Border BorderBrush="Black" BorderThickness="0 1" Background="#EEE"> 
     <Grid> 
      <TextBlock HorizontalAlignment="Center" 
         FontSize="18" FontWeight="Bold" 
         Text="{Binding Path=Items[0].Start, Converter={StaticResource FormatDateIntelligentConverter}}" /> 
      <TextBlock Margin="10 0" HorizontalAlignment="Right" VerticalAlignment="Center" 
         FontSize="16" Foreground="#9000"> 
       <TextBlock.Text> 
        <MultiBinding Converter="{StaticResource TotalDurationConverter}"> 
         <MultiBinding.Bindings> 
          <Binding Path="Items" /> 
          <Binding Path="Items.Count" /> 
         </MultiBinding.Bindings> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </Grid> 
    </Border> 
</DataTemplate> 

그리고 IMultiValueConverterTotalDurationConverter 변경 :이 작업까지 끝난 것입니다. 그냥 의 두 번째 항목을 무시합니다.

답변

1

그래서 두 가지 가능성이 있으며 간단한 솔루션 아래에서 시도해 볼 수 있고 작동하는지 알려주세요.

해결책 1 - textbloxk를 사용하고 있으므로 매우 단순하고 기본적인 방법은 명시 적으로 양방향으로 모드를 설정합니다. TextBlock 기본 바인딩 모드는 한 가지 방법이라고 생각합니다.

해결 방법 2 - 여기 박스 - 콤보와 협력 내가 직면 유사한 문제는, 이미했던 것처럼이 목록에 두 번째 텍스트 블록 사용 멀티 바인딩, 첫 번째 바인드를 들어 나를 근무하는 주위 작품이다 두 번째는 뷰 모델에서 목록이 변경 될 때 트리거되는 모든 속성에 바인딩합니다 (예 : List.Count를 반환하는 int 속성).이 두 번째 더미 속성은 변환기가 다시 평가되는지 확인합니다.

나는 두 번째 옵션이 효과가 있다고 생각합니다.

작동하지 않는지 알려주세요.

관련, 이씨

+0

그래 나는 MultiBinding의 소스 목록의 List.Count에 결합하는 생각 작업을 떠난 후. 내일 시도하고 그것이 어떻게되는지 보게 될 것입니다. –

+0

쿨, 그것은 시나리오 중 하나에서 나를 위해 일해 왔습니다 ... 그것이 작동하는지 알려주세요. 모든 최선 :) –