WPF- Datatrigger와 트리거를 결합하는 방법은 무엇입니까?
-
03-07-2019 - |
문제
노트 관련 질문을했습니다. DataTrigger와 EventTrigger를 결합하는 방법은 무엇입니까?
여러 항목이 포함 된 목록 상자가 있습니다. 항목의 클래스가 구현됩니다 INotifyPropertyChanged
그리고 재산이 있습니다 IsAvailable
. 해당 속성을 사용하여 다른 색상을 사용하여 목록에서 사용할 수없는 옵션을 표시합니다.
그러나 선택한 항목을 사용할 수없는 경우 전경색이 빨간색이어야합니다.
<ListBox>
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:InstitutionViewModel}">
<TextBlock Name="Name" Text="{Binding Name}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsAvailable}" Value="False">
<Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.Resources>
</ListBox>
위의 데이터 트리거를 사용하여 사용할 수없는 항목을 회색으로 만들었습니다.
내가 직면 한 문제는 항목이 선택되었다는 사실은 템플릿이 바인딩되는 기본 데이터와 관련이 없다는 것입니다. 내가 정말로 원하는 것은 정기적 인 둘 다 지원하는 일종의 멀티 트리거입니다. Trigger
종속성 속성 (ListBoxItem.IsSelected
)와 함께 DataTrigger
바운드 데이터 항목에서.
내보기 모델에 선택의 개념을 도입하지 않고도 할 수 있습니까?
내가 사용할 수없는 항목을 비활성화하지 않는 이유를 궁금해하는 사람이라면,이 항목을 선택할 수없는 옵션을 선택할 수있는 응용 프로그램의 요구 사항이라는 것을 이해하십시오. 실제로 몇 가지 목록 상자가 있으며, 하나의 효과로 선택할 수 있습니다. 이전 선택에 따라 항목이 비활성화 된 경우 사용자가 마음을 바꾸거나 다른 조합을 탐색 할 수 없으므로 항목을 비활성화 할 수 없습니다.
해결책
이 문제에 반대하는 다른 사람에게는 저에게 적합한 해결책을 찾았습니다. 물론, 나는 여전히 다른 흥미로운 답변을보고 싶어합니다.
내가 한 일은 다음과 같습니다.
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding
RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
Path=IsSelected}" Value="True"/>
<Condition Binding="{Binding IsAvailable}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="Name" Property="Foreground" Value="#F00"/>
</MultiDataTrigger>
그래도 멀티 트리거 인 것에 대해 특별한 것은 없습니다. 데이터 템플릿에서 선택한 항목을 다르게 스타일링하려면 다음을 사용할 수 있습니다.
<DataTrigger Binding="{Binding
RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
Path=IsSelected}" Value="True">
<Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>
다른 팁
함께 사용합니다 DataGridRow
바인딩 모드를 변경하십시오 Self
:
Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=...