DataTemplateSelector을 유동적인 변경값에 따른 Template 변경에 대해 문의드립니다.

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 미만 인 조건으로 처리 하시면 될 것 같습니다.

8개의 좋아요