2012-11-21 5 views
6

Wie kann ich einen TextBoxes Text an eine globale Variable in meiner Klasse in XAML binden? Dies ist übrigens für Windows Phone. HierXAML-Datenbindung an eine globale Variable?

ist der Code:

namespace Class 
    { 
    public partial class Login : PhoneApplicationPage 
    { 
     public static bool is_verifying = false; 

     public Login() 
     { 
      InitializeComponent();   
     } 


     private void login_button_Click(object sender, RoutedEventArgs e) 
     { 
      //navigate to main page 
      NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute)); 
     } 

     private void show_help(object sender, EventArgs e) 
     { 
      is_verifying = true; 
     } 
     } 

    } 

Und ich möchte einen Textfelder Text binden "is_verifying".

Danke.

Antwort

1

Sie können nicht an ein Feld binden, Sie müssen es zu einer Eigenschaft machen, und dennoch werden Sie nicht über Änderungen benachrichtigt, es sei denn, Sie implementieren eine Art Benachrichtigungsmechanismus, der z. durch Implementierung von INotifyPropertyChanged oder durch die Herstellung einer Eigenschaft DependencyProperty.

Wenn Sie eine Eigenschaft haben, können Sie normalerweise die Markup-Erweiterung x:Static verwenden, um an sie zu binden.

Die Bindung an eine statische Eigenschaft erfordert jedoch einige Tricks, die in Ihrem Fall möglicherweise nicht funktionieren, da sie entweder eine Dummy-Instanz Ihrer Klasse erstellen oder sie zu einem Singleton machen müssen. Auch ich denke zumindest in Windows Phone 7 x:Static ist nicht verfügbar. Sie sollten also in Erwägung ziehen, die Eigenschaft als Instanzeigenschaft zu definieren, möglicherweise in einem separaten ViewModel, das Sie dann als DataContext festlegen können.

+0

Danke dafür! Ich hatte bereits einige Erfolge mit der Lösung von KDiTraglia, aber Ihre Antwort bietet einige nützliche Einblicke! In XAML für VS2012- und Windows Phone-Anwendungen scheint auch kein "x: static", nur "x: Null" und "x: StaticResource" zu sein. – Travv92

+0

@ Travv92 Ich habe gerade herausgefunden, dass mindestens WP7 x: Static nicht unterstützt. Ich fügte am Ende meiner Antwort eine alternative (und IMO besser) Lösung hinzu. Der Punkt über INotifyPropertyChanged/DependencyProperty gilt jedoch weiterhin für diesen Punkt. – Botz3000

13

Zunächst können Sie nur an Eigenschaften binden, also müssen Sie einen Getter und Setter hinzufügen.

public static bool is_verifying { get; set; } 

Weiter Sie entweder die DataContext des Formulars festlegen können Ihre Klasse hier und binden mit einer einfach zu sein:

"{Binding is_verifying}" 

Oder erstellen Sie einen Verweis auf die Klasse in den Ressourcen der Form und referenzieren Sie es so:

<Window.Resources> 
    <local:Login x:Key="LoginForm"/> 
</Window.Resources> 
... 

<TextBox Text="{Binding Source={StaticResource LoginForm}, Path=is_verifying}"/> 
+0

Danke, ich habe dein erstes Beispiel benutzt und perfekt funktioniert :) – Travv92