2011-10-01 4 views
1

J'essaye de lier une propriété statique d'une classe différente à la propriété Text d'un TextBlock et peut faire fonctionner la liaison, mais il n'y a pas de mise à jour de la propriété Text lorsque la valeur de la propriété statique a changé. J'ai lu que je ne peux pas utiliser INotifyPropertyChanged parce que la propriété est statique et a vu un certain nombre de solutions qui suggèrent d'utiliser une propriété de dépendance. Je suis très nouveau à C# et ne comprends pas vraiment comment utiliser les propriétés de dépendance, mais j'ai fait quelques tentatives qui ne semblent pas fonctionner pour deux raisons. 1. Ma propriété statique possède un getter et un setter personnalisés et 2. La propriété static est utilisée dans un certain nombre de méthodes statiques que je n'arrive pas à comprendre pour faire du travail en utilisant une propriété Dependency. Je ne sais pas comment utiliser un getter et un accesseur personnalisés lors de l'utilisation d'une propriété Dependency ou si cela peut même être fait ou comment continuer à utiliser la propriété statique dans les méthodes statiques après que je l'ai modifiée en propriété Dependency.Comment lier en XAML à une propriété statique?

Voici le code actuel de la propriété statique:

public class Helper 
{ 
    public static string Token 
    { 
     get 
     { 
      using (StreamReader streamReader = new StreamReader("Token.ini")) 
      { 
       return streamReader.ReadLine(); 
      } 
     } 
     set 
     { 
      using (StreamWriter streamWriter = new StreamWriter("Token.ini")) 
      { 
       streamWriter.WriteLine(value); 
      } 
     } 
    } 

public static MethodThatUsesToken(){} 
public static OtherMethodThatUsesToken(){} 

Et ici le XAML actuel pour la liaison qui fonctionne, mais ne met pas à jour:

<Window.Resources> 
<local:Helper x:Key="helper"/> 
</Window.Resources> 

<TextBlock Text="{Binding Source={StaticResource helper},Path=Token Converter={StaticResource NameConverter}}"/> 

J'apprécie vraiment toute aide!

+0

Pourquoi le rendre statique? Pourquoi ne pas construire le lecteur/graveur de jetons dans une classe complète, et en exposer une instance sur votre modèle de vue (via une propriété 'string Token')? Alors vous auriez un moyen pratique de réutiliser ce code si vous avez un autre fichier de jeton ... –

Répondre

3

Ce n'est pas possible actuellement, mais sera en 4.5 .NET: Voir aussi "WPF 4.5 – Part 9 : binding to static properties"

Il y a une solution de contournement a écrit dans ce SO fil: Binding to static property

+0

Au moins, il est bon de savoir que je ne me débattais pas pour quelque chose de facile. La solution de contournement que vous avez fournie est ce que j'ai tenté de mettre en œuvre avant de demander de l'aide, mais je n'ai trouvé aucun moyen de la faire fonctionner avec mon getter et setter ou d'utiliser la propriété dans les méthodes statiques. – Menase

0

Reliure à la propriété statique est un problème (et non disponible dans WPF) en raison de la notification de modification (implémentation de INotifyPropertyChanged pour les propriétés statiques). La liaison à la propriété statique sera introduite dans WPF 4.5 (vous pouvez le vérifier en installant .NET 4.5 Developer Preview). Plus de détails à ce sujet peuvent être trouvés here.

1

Au cas où cela aiderait quelqu'un d'autre, j'ai pensé que je posterais ma solution finale qui fonctionne très bien pour mon but. Puisqu'il ne s'avère pas possible sans .NET 4.5 j'ai fini par changer la propriété et les méthodes pour ne plus être statiques et changé la classe en singleton puis implémenté INotfiyPropertyChanged et changé la source de liaison XAML en x: Static à la place de créer une instance dans Window.Resources.

Questions connexes