DataTemplateSelector 은 처음 바인딩 시점에 결정되고 그 이후엔 더 이상 호출 하지 않습니다.
해결 하시려면 2가지 방법이 있습니다.
방법 1.
그리드에 바인딩 된 Selectedfiles 데이터를 다시 설정해서 다시 랜더링 시켜주는 방법
이 방법은 데이터 양이 많을 경우 다소 비효율 적일 수 있습니다.
방법 2.
@Nobody 님이 제안 하신 트리거를 이용하는 방법 입니다.
<DataGridTemplateColumn Header="Status"
Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding }">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<!-- 기본 템플릿 -->
<Setter Property="ContentTemplate" Value="{StaticResource WaitingTemplate}" />
<!-- StatusFilesize속성에 따라 템플릿 변경 -->
<Style.Triggers>
<DataTrigger Binding="{Binding StatusFilesize}" Value="1">
<Setter Property="ContentTemplate" Value="{StaticResource ProgressTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding StatusFilesize}" Value="100">
<Setter Property="ContentTemplate" Value="{StaticResource CompleteTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
위 예시에서는 StatusFilesize값이 1 인 경우 ProgressTemplate 이 적용 되도록 예시를 해놨지만
컨버터를 이용해서 1이상 100 미만 인 조건으로 처리 하시면 될 것 같습니다.