【问题标题】:XAML data binding to a global variable?XAML 数据绑定到全局变量?
【发布时间】:2012-11-09 19:19:35
【问题描述】:

如何在 XAML 中将 TextBoxes Text 绑定到我的类中的全局变量? 顺便说一下,这是针对 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”。

谢谢。

【问题讨论】:

    标签: c# silverlight xaml data-binding windows-phone-8


    【解决方案1】:

    首先你只能绑定到属性,所以你需要添加一个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}"/>
    

    【讨论】:

      【解决方案2】:

      您不能绑定到一个字段,您需要将其设为属性,然后您将不会收到更改通知,除非您实施某种通知机制,例如可以实现通过实现INotifyPropertyChanged 或将属性设为DependencyProperty

      当你有一个属性时,你通常可以使用x:Static 标记扩展来绑定它。

      但是绑定到静态属性需要一些技巧,这可能不适用于您的情况,因为它们需要创建类的虚拟实例或使其成为单例。另外我认为至少在 Windows phone 7 中 x:Static 不可用。因此,您可能需要考虑将属性设置为实例属性,可能在单独的 ViewModel 上,然后您可以将其设置为 DataContext

      【讨论】:

      • 谢谢!我已经使用 KDiTraglia 的解决方案取得了一些成功,但您的回答提供了一些有用的见解!此外,在 VS2012 和 Windows Phone 应用程序的 XAML 中,似乎没有“x:static”,只有“x:Null”和“x:StaticResource”。
      • @Travv92 我刚刚发现至少 WP7 不支持 x:Static。我在答案的最后添加了一个替代(和 IMO 更好)的解决方案。不过,关于 INotifyPropertyChanged/DependencyProperty 的观点仍然适用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 2015-07-03
      • 2013-03-23
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多