2009-12-11 3 views
1

내 다중 선택 목록 상자WPF DataTrigger - ListBoxItem의에 isSelected

<DataTrigger Value="True"> 
    <DataTrigger.Binding> 
     <MultiBinding Converter="{StaticResource DisableWorkItemConverter}"> 
      <Binding ElementName="MainForm" Path="PickedWorkItemID"/> 
      <Binding Path="Id"/> 
     </MultiBinding> 
    </DataTrigger.Binding> 
    <Setter Property="IsEnabled" Value="False"/> 
    <Setter Property="IsSelected" Value="False"/> 
</DataTrigger> 

의 IsEnabled 잘 설정됩니다에서 ListBoxItems에 다음과 같은 데이터 트리거를 가지고 있지만,에 isSelected가 설정되지 않는 설정. 어떻게 해결할 수 있습니까?

IsEnabled를 사용하여 IsSelected와 충돌했는지 확인하려고했으나 항목을 선택하지 않아도됩니다.

다시 말하면, IsEnabled가 올바르게 작동하기 때문에 바인딩과 변환기가 올바르게 작동하고 있음을 알 수 있습니다. 그러나 어떤 이유로 IsSelected는 설정 해제되지 않습니다.


편집 : IsEnabled처럼 작동하지 않기를 바랍니다. 이 트리거가 false를 평가하면 항목이 다시 활성화되므로 이전에 선택하지 않은 행을 선택하지 않으려는 이유는이 트리거가 더 이상 사실이 아니기 때문입니다.

아이디어가 있으십니까? 기본적으로 사용할 수없는 행을 선택하지 않으려합니다.


편집 2 :

나는 그것이 체인 데이터 트리거를 켜거나 끌 수 있으며, 그 중 하나가 작동하지 않았다 것이라고 기대하고 정상적인 트리거를 추가하는 시도

.

<Style.Triggers> 
    <DataTrigger Value="True"> 
     <DataTrigger.Binding> 
      <MultiBinding Converter="{StaticResource DisableWorkItemConverter}"> 
       <Binding ElementName="MainForm" Path="PickedWorkItemID"/> 
       <Binding Path="Id"/> 
      </MultiBinding> 
     </DataTrigger.Binding> 
     <Setter Property="IsEnabled" Value="False"/> 
    </DataTrigger> 
    <Trigger Property="IsEnabled" Value="False"> 
     <Setter Property="IsSelected" Value="False"></Setter> 
    </Trigger> 
</Style.Triggers> 
+0

문제를 재현 할 때 트리거에서 ListBoxItem IsSelected = True를 설정하면 트리거에서도 False로 설정할 수 있음을 발견했습니다. 사용자가 항목을 선택하면 트리거가 더 이상 IsSelected를 변경하지 않습니다. –

+0

흠, 재미 있습니다. 선택을 제거 할 수있는 방법을 찾아 내게 좋은 징조로 보이지 않습니다. 그것을 들여다 주셔서 감사합니다. – Vaccano

답변

1

"IsSelected"속성이 설정되면 사용자 또는 코드 숨김 여부에 관계없이 설정자가 더 이상 작동하지 않는 것처럼 보입니다. 주위에 어떤 방법이 있는지 확실하지 않지만, 적어도 특정 경우에 작동 할 수있는 해킹이 있습니다. ListBoxItem에 "IsEnabledChanged"이벤트에 대한 핸들러를 등록한 다음 데이터 조건을 확인하고 데이터가 호출되면 핸들러에서 IsSelected를 설정할 수 있습니다.

예 :

private void ListBoxItem_EnabledChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    ListBoxItem senderItem = (ListBoxItem)sender; 
    if (YourDataCondition == true) 
    { 
     senderItem.IsSelected = false; 
    } 
} 

나는 당신의 ListBoxItem의 일부 종속성 속성을 추가는 "OnPropertyChanged를"이벤트와 유사한 방법을 등록하고 그 속성을 변경하는 것입니다 찾을 수 있었던 유일한 다른 솔루션 DataTrigger에서.

저는 아직 확인할 수 없었던 someone else's attempt to do this입니다.

+0

그 링크는 나를 위해 트릭을했습니다. 당신의 도움을 주셔서 감사합니다! – Vaccano

관련 문제