2012-11-21 20 views
6

テキストボックステキストをXAMLのクラスのグローバル変数にバインドするにはどうすればよいですか? これはWindows Phone用です。XAMLデータがグローバル変数にバインドされていますか?

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; 
     } 
     } 

    } 

そして私は "is_verifying" にテキストボックスのテキストをバインドしたい:ここ

はコードです。

ありがとうございました。

答えて

1

フィールドにバインドすることはできません。プロパティにする必要がありますが、通知メカニズムを実装しない限り変更は通知されません。 INotifyPropertyChangedを実装するか、またはプロパティをDependencyPropertyにすることによって実現します。

プロパティを所有している場合は、通常、x:Staticマークアップ拡張を使用してバインドできます。

静的プロパティにバインドするには、クラスのダミーインスタンスを作成するかシングルトンにする必要があるため、あなたのケースではうまくいかないことがあります。また、私は少なくともWindowsの電話7 x:Staticではないと思う。したがって、プロパティをインスタンスプロパティにすることを検討したい場合もあります。別のViewModelでDataContextとして設定することもできます。

+0

ありがとうございました!私はすでにKDiTragliaのソリューションでいくつかの成功を収めましたが、あなたの答えはいくつかの有用な洞察を提供します!また、VS2012およびWindows Phoneアプリケーション用のXAMLでは、「x:static」、「x:Null」および「x:StaticResource」のみが存在しないようです。 – Travv92

+0

@ Travv92私はちょうどWP7がx:Staticをサポートしていないことを知りました。私は私の答えの終わりに代替(そしてより良いIMO)ソリューションを追加しました。しかし、INotifyPropertyChanged/DependencyPropertyについてのポイントはまだそれに適用されます。 – Botz3000

13

まずはプロパティにのみバインドすることができるので、ゲッターとセッターを追加する必要があります。

public static bool is_verifying { get; set; } 

次のあなたがここにあなたのクラスであるためにあなたのフォームのDataContextを設定し、シンプルでバインドすることができ、次のいずれか

"{Binding is_verifying}" 

またはフォームのリソースで、あなたのクラスへの参照を作成し、それを参考にしてください:

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

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

ありがとう、私はあなたの最初の例を使用し、完全に働いた:) – Travv92

関連する問題