Stellen Sie sich vor, Sie haben eine Liste mit Benutzerauswahlen. Je nachdem, welche Auswahlen der Benutzer getroffen hat, sind andere Auswahlen möglicherweise nicht mehr verfügbar.
Ich habe eine ValueConverter, die möglicherweise dies behandeln könnte. Wenn er weiß, welche Auswahlen getroffen wurden, wird er einen Wert zurückgeben, der angibt, ob das umgewandelte Element noch auswählbar ist.
Das Problem ist, dass man nur im ViewModel für diesen Bildschirm weiß, welche Auswahlmöglichkeiten der Benutzer hat. Kein Problem, dachte ich. Ich mache den Konverter zu einer Eigenschaft des ViewModel, und im Konstruktor für den Konverter übergebe ich einen Verweis auf das ViewModel, so dass der Konverter die Liste der ausgewählten Elemente jederzeit überprüfen kann, wenn er will.
Das Problem, das ich jetzt habe, ist, dass es nicht so aussieht, als ob es tatsächlich irgendwelche Umwandlungen durchführt.
Um es auf den Punkt zu bringen: Das ViewModel hat eine Eigenschaft namens MySelectionConverter vom Typ IValueConverter. Das ViewModel hat eine Liste von ausgewählten Elementen. In der Ansicht (vom Typ MyScreen, der von UserControl erbt) befindet sich ein Listenfeld mit Elementen.
Das ItemTemplate sieht in etwa so aus:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="Auto" Width="100" VerticalAlignment="Top" Visibility="{Binding Path=DataContext.MySelectionConverter, RelativeSource={RelativeSource AncestorType={x:Type MyScreen}}}">
<TextBlock Text="The user might want to select me." />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
Ich vermute, dass mit meiner Bindung etwas nicht stimmt. Aber vielleicht können Sie das auch gar nicht tun. Für jede Hilfe bin ich dankbar.
Editar: Nach den Informationen, die ich bisher erhalten habe, war meine Bindung falsch. Aber es stellt sich heraus, dass ich nicht tun kann, was ich zu tun versucht habe. Im Wesentlichen habe ich versucht, den Konverter über eine Bindung mit zu setzen:
Visibility="{Binding Converter={Binding Path=DataContext.StyleOptionConverter, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:StyleSelectionScreen}}}}
Visual Studio sagt mir:
Eine 'Bindung' kann nicht auf der Eigenschaft 'Konverter' vom Typ 'Bindung' gesetzt werden. Ein 'Binding' kann nur gesetzt werden auf eine DependencyProperty eines DependencyObject gesetzt werden.
Jetzt stellt sich also das Problem: Auf welche Weise kann ich dies umgehen? Ich brauche einen Konverter, der über den Zustand des ViewModel für den Bildschirm weiß, in dem es verwendet wird.