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 le TextBlock reçoit le même DataContext que c'est AssociatedObject.
  • Hmm.. Cela devrait être intéressant.
InformationsquelleAutor Jason D | 2013-06-19