La liaison de la valeur d'un Setter de la Propriété dans WPF
J'ai passé toute la journée à chercher un moyen d'afficher une valeur par défaut chaîne de texte sur un ComboBox
et le plus proche que j'ai réussi à trouver qui a travaillé était un exemple qui utilise le filigrane. Quand mon application s'ouvre, le ComboBox
's la Visibilité est affectée à la propriété s'est Effondré et puis rendue visible par une commande. Malheureusement, je ne peux pas obtenir le filigrane à suivre. Voici ce que je suis en train de travailler avec:
<Style x:Key="watermarkLabelStyle">
<Setter Property="TextBlock.Foreground" Value="Black" />
<Setter Property="FrameworkElement.Opacity" Value="0.8" />
<Setter Property="TextBlock.FontSize" Value="12" />
<Setter Property="TextBlock.FontStyle" Value="Italic" />
<Setter Property="TextBlock.Margin" Value="8,4,4,4" />
<Setter Property="TextBlock.Visibility" Value="{Binding Visible}" />
</Style>
{Binding Visible}
n'a aucun effet, même si d'autres contrôles dans la fenêtre sont liés à elle et de se comporter correctement.
<ComboBox ItemsSource="{Binding LeagueFormatsNode}"
x:Name="leagueFormatComboBox"
Grid.Column="0"
Grid.Row="1"
Grid.ColumnSpan="3"
ScrollViewer.CanContentScroll="False"
HorizontalContentAlignment="Stretch"
Visibility="{Binding Visible}"
Behaviors:WatermarkComboBoxBehavior.EnableWatermark="True"
Behaviors:WatermarkComboBoxBehavior.Label="Select League Format"
Behaviors:WatermarkComboBoxBehavior.LabelStyle="{StaticResource watermarkLabelStyle}" />
Et la Visible
propriété du viewmodel:
public Visibility Visible
{
get { return _visibile; }
set
{
if (_visibile == value)
return;
_visibile = value;
RaisePropertyChanged(() => Visible);
}
}
Que puis-je faire pour le setter dans le style de comportement et de registre de la liaison?
Si vous avez besoin de plus de code, je serai heureux d'en fournir.
Mise à jour: Snoop est de montrer une liaison erreur sur le TextBlock la Visibilité de la propriété. Sur le DataContext onglet, il est dit "l'objet est null". J'ai été à la recherche d'un moyen de résoudre ce problème, mais je n'ai pas été en mesure de comprendre comment. Si quelqu'un serait assez aimable pour me pousser dans la bonne direction, je serais certainement l'apprécier. Le code est entré partir d'ici http://archive.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=PierreCode&ReleaseId=3546
Je ne suis pas nécessairement à la recherche pour une solution complète, juste assez de conseils pour me guider vers la solution.
- Utilisation Snoop pour inspecter l'Arbre Visuel et de voir quelle est la
DataContext
de cet élément. Je soupçonne que vous pourriez également avoir d'erreur de liaison de l'information dans la Fenêtre Sortie de Visual Studio. - Lorsque j'utilise Snoop, ce qui se passe:
The assembly with display name 'Snoop.XmlSerializers' failed to load in the 'LoadFrom' binding context of the AppDomain with ID 1. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly 'Snoop.XmlSerializers, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Snoop fonctionne très bien sur d'autres applications. - Snoop est de montrer une liaison erreur sur le
TextBlock
's de la Visibilité de la propriété. Sur le DataContext onglet, il est dit "l'objet est null". - C'est parce que la
TextBlock
est probablement en cours de création par le comportement. Vous devez changer le code dans le Comportement de sorte que leTextBlock
reçoit le même DataContext que c'est AssociatedObject. - Hmm.. Cela devrait être intéressant.
Vous devez vous connecter pour publier un commentaire.
Basé sur votre affiché le code, je suis en supposant que votre utilisation de la
Behavior
de IciMaintenant, si vous téléchargez l'exemple de la fermeture à glissière dans le Lien ci-dessus, vous avez 5 fichiers que vous donnez cette série de
Behavior
's(qui se trouve dans leBehavior
dossier).Modifier
TextBlockAdorner.cs
Dans le constructeur juste après la ligne
ajouter
Maintenant dans votre
Style
poseur de passer votreBinding
àet vous devriez faire.
Côté-Notes:
System.Windows.Visibility
dans votre VM. GarderVisibility
propriété dans la machine virtuelle comme unbool
et lorsque votreBinding
dans le code xaml utiliser unBooleanToVisibilityConverter
(disponible directement dans le xaml. Vous n'avez pas à en créer un)Style
s'obtenir dans l'habitude de la spécification d'unType="..."
. Elle permet non seulement d'identifier en un coup d'œil quiStyle
's se rapportent à ce qu'mais aussi d'économiser certains redondantes de qualification de type pour chacun de vos setter propriétés.donc quelque chose comme
sera
Visible
alors qu'il est privé de back-end est_visibile
.