문제

노트 관련 질문을했습니다. 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=... 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top