XAML如何绑定全局变量?

9
我该如何在XAML中将TextBox的文本绑定到我的类中的全局变量? 顺便说一下,这是为Windows Phone准备的。 以下是代码:
    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”绑定。谢谢。
2个回答

16

首先,您只能绑定到属性,因此需要添加getter和setter。

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}"/>

4
无法绑定到字段,您需要将其转换为属性。即使这样,除非实现一些通知机制,否则您仍然无法收到更改通知,可以通过实现INotifyPropertyChanged或将该属性设置为DependencyProperty来实现。
当您拥有属性时,通常可以使用x:Static标记扩展进行绑定。
但是,绑定到静态属性需要一些技巧,这可能在您的情况下无法工作,因为它们需要创建类的虚拟实例或使其成为单例。此外,我认为至少在Windows Phone 7中,x:Static不可用。因此,您可能希望考虑将属性设置为实例属性,可能在单独的ViewModel上,并将其设置为DataContext

谢谢!我已经在KDiTraglia的解决方案中取得了一些成功,但是你的答案提供了一些有用的见解!此外,在VS2012和Windows Phone应用程序的XAML中,似乎没有“x:static”,只有“x:Null”和“x:StaticResource”。 - Travv92
@Travv92 我刚刚发现至少 WP7 不支持 x:Static。我在我的答案末尾添加了一种替代方案(我认为更好)。不过,关于 INotifyPropertyChanged/DependencyProperty 的要点仍然适用。 - Botz3000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接