[WPF] ListView 에서 특정 ListViewItem 만 다르게 하는 방법

안녕하세요.

WPF로 데스크탑 앱을 개발하고 있습니다.

ListView를 ItemContainerStyle 를 이용하여 디자인하고 몇 가지 트리거를 걸었는데요.

IsSelect나 IsMouseOver 등을 통해 특정 아이템을 다르게 디자인하는게 가능하지만

DataTrigger를 이용하여 특정 아이템만 다르게 설정하는 방법을 모르겠네요…

예를 들어

bool IsImpact;

라는 데이터 바인딩 변수가 있고 이 변수가 true가 되면 특정 아이템의 텍스트 컬러를 변경이 가능할까요 ?

전체 적용은 가능한데 IsSelect 같이 특정 조건과 맞물리지 않으면 개별 적용이 안되는거 같아서요,

말을 제대로 적은건지 모르겠네요.

읽어주셔서 감사합니다!!

답변 주시면 더욱 감사합니다~

좋아요 1

다양한 처리 방법이 있지만 ItemTemplateSelector 를 이용하는 것이 원하시는 목적에 부합할 것 같습니다.

아래 링크를 참조해보세요!

좋아요 4

오 답변 감사합니다! 제가 찾던게 이건거 같아요!!

좋아요 2

사족을 좀 더 달아보자면욤.

말씀하신 상황상 DataTrigger 동작이 정상 적용 되어야 하지만, 만약 여러 Trigger 가 나열되어 있다면
다른 Trigger 의 동작에 의해 Setter 동작이 덮어질 수 있어요.

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Foreground" Value="Yellow" />
    </Trigger>
    <DataTrigger Binding="{Binding IsSelect}" Value="True">
        <Setter Property="Foreground" Value="Red" />
    </DataTrigger>
</Style.Triggers>

요 동작과 두 Trigger 의 순서를 바꾼

<Style.Triggers>
    <DataTrigger Binding="{Binding IsSelect}" Value="True">
        <Setter Property="Foreground" Value="Red" />
    </DataTrigger>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Foreground" Value="Yellow" />
    </Trigger>
</Style.Triggers>

요 Trigger 설정은 동작이 달라요.
만약 IsSelect 가 정상적으로 들어왔다고 하더라도 여러 Trigger 의 설정에 의해
동작 하지 않거나 오동작 하는 것처럼 보일 수 있습니다.
그래서 Trigger 설정은 조심해서 해야하죠.

이럴 때 @dimohy 님이 말씀해주신 TemplateSelector 가 답이 될 수 있습니다. ~ㅁ~b

좋아요 4