Frage

  

Hinweis Ich habe die entsprechende Frage gestellt: Wie kombinieren und Datatrigger Eventtrigger?

Ich habe ein Listenfeld mehrere Elemente enthält. Die Artikel der Klasse implementiert INotifyPropertyChanged und hat eine Eigenschaft IsAvailable. Ich benutze diese Eigenschaft nicht verfügbar Optionen in der Liste, um anzuzeigen, eine andere Farbe verwendet wird.

Wenn jedoch ein ausgewähltes Element nicht verfügbar ist, dann sollte die Vordergrundfarbe rot sein.

<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>

Ich verwende den obigen Daten Trigger nicht verfügbar Artikel graut.

Das Problem ist, ich bin vor, dass die Tatsache, dass das Element ausgewählt ist, hat nichts mit den zugrunde liegenden Daten zu tun, auf denen die Vorlage gebunden ist. Was ich wirklich will, ist eine Art von Multi-Trigger, der auf einer Abhängigkeitseigenschaft (Trigger) zusammen mit einem ListBoxItem.IsSelected auf dem gebundenen Datenelement sowohl eine regelmäßige DataTrigger unterstützt.

Kann dies ohne Einführung des Konzepts der Auswahl in meiner Sicht Modell getan werden?

Für alle fragen, warum ich nicht verfügbare Artikel nicht deaktivieren, verstehen, dass es eine Anforderung der Anwendung, die nicht verfügbar Optionen ausgewählt werden können. Es gibt tatsächlich ein paar Listenfelder und Auswahl in einem Effekt, was in den anderen zur Verfügung steht. Ich kann die Elemente nicht deaktivieren, da der Benutzer nicht ihre Meinung wäre in der Lage zu ändern oder verschiedene Kombinationen zu entdecken, wenn Gegenstände auf früheren Auswahlen disabled beruhten.

War es hilfreich?

Lösung

Für alle anderen, die sich gegen dieses Problem ist, fand ich eine Lösung, die für mich funktioniert. Natürlich bin ich immer noch daran interessiert andere interessante Antworten zu sehen.

Hier ist, was ich getan habe:

<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>

Es gibt nichts besonderes über das obwohl ein Multi-Trigger zu sein. Wenn Sie nur das ausgewählte Element anders in Ihrer Datenvorlage stylen möchten, können Sie verwenden:

<DataTrigger Binding="{Binding 
  RelativeSource={
    RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
    Path=IsSelected}" Value="True">
  <Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>

Andere Tipps

Um es mit DataGridRow Wechsel-Modus verwenden, die Bindung an Self:

Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=... 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top