Je souhaite essayer un petit ValueConverter
personnalisé dans une classe qui, après avoir été instanciée (par l'intermédiaire du constructeur par défaut, qui n'appelle que InitializeComponents()
), reçoit un autre DataContext
, spécifiquement une instance d'un ViewModel.Utilisation d'un ValueConverter après un commutateur DataContext
L'utilisation d'un StaticResource
dans le Binding
ne fonctionne pas du tout (donne un NullReferenceException
), puisque le DataContext
a depuis été changé (n'est pas this
plus).
J'ai essayé de mettre DataContext = this;
avant l'appel InitializeComponents
, pas de changement. Dois-je regarder dans ce gizmo MarkupExtension
(comme décrit in this article)?
J'ai également essayé de créer une instance de la coutume Value Converter
dans le ViewModel (le DataContext
actuel), n'aide pas non plus.
Je peux fournir des détails supplémentaires à tout moment. Merci d'avance ! J'essaie d'afficher un ContextMenu dans le TextBlock. Le ContextMenu contient un seul MenuItem. L'en-tête de MenuItem peut être "Paramètres" par exemple. Les enfants (rendus en tant que MenuItems) du dit MenuItem proviennent d'un Enum, d'où le ItemsSource sur le MenuItem.
Maintenant, tout est bien affiché, mais j'essaie de faire en sorte que l'un des enfants (par exemple un membre de l'Enum) soit sélectionné par défaut, puisqu'il y a déjà un réglage par défaut. D'autres informations d'arrière-plan peuvent être trouvées dans my other question.
Modifier:
...
<UserControl.Resources>
<Helpers:DisplayTypeToDefaultValueConverter x:Key="displayTypeConverter" />
</UserControl.Resources>
...
<TextBlock x:Name="InstructionLabel"
TextWrapping="Wrap" Text="{Binding Path=SelectedNodeText}"
Grid.RowSpan="1">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Settings" Name="SettingsPop"
DataContext="{Binding}"
ItemsSource="{Binding Source={StaticResource DisplayTypeValues}}"
IsCheckable="True"
Click="SettingsType_Click">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding}"/>
<Setter Property="IsChecked">
<Setter.Value>
<Binding Converter="{StaticResource displayTypeConverter}" />
</Setter.Value>
</Setter>
</Style>
</MenuItem.ItemContainerStyle>
</ContextMenu>
</TextBlock>
Je n'ai maintenant réalisé que c'est la ContextMenu redoutée. C'est le problème, n'est-ce pas?
1. DataContext n'a aucune influence sur la liaison StaticResource. 2. Pouvez-vous s'il vous plaît fournir la ligne de xaml où vous liez? –
Venir tout de suite dans un montage. – Dr1Ku
Et où est DisplayTypeValues? Impossible de voir la définition.Et le code de votre DisplayTypeToDefaultValueConverter serait également utile. –