2009-12-11 98 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」屬性,無論是由用戶還是在後面的代碼中,setter將不再工作。我不確定是否有任何解決方法,但至少有一個破解可以在你的特定情況下起作用。您可以在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