将XAML“标签”绑定到Xamarin.Forms中“ public const”后面的代码?

问题描述 投票:2回答:1

如何使用Xamarin.Forms将XAML中的Label绑定到代码隐藏中的public const string

或者除了创建访问我的公共常量的公共静态属性外别无其他方法?顺便说一下,可以将其改为private const string

我在我的“ App”类中声明了一个公共常量字符串:

public partial class App : Application
{
    public const string ShortVersion = "v1.00 Beta 1";
    ...

然后我想将其绑定到“ MainPage.xaml”文件中的标签上:

<Label Text="{Binding App.ShortVersion}"  
       x:Name="_versionLabel" Style="{StaticResource versionLabel}" ...
/>

这是我第一次尝试数据绑定。现在,我正在“ MainPage.xaml.cs”文件中执行此操作(而不是数据绑定):

public MainPage()
{
    InitializeComponent();
    _versionLabel.Text = App.ShortVersion;
}
c# xaml xamarin.forms data-binding const
1个回答
2
投票

根据您的评论,我发现您对Xamarin中的绑定工作原理并不熟悉。我强烈建议您仔细阅读Data Binding Basics

尽管如此,您的问题的答案是-是的,您可以将其绑定到const变量。但是,该变量需要是公共的。

总结绑定的工作原理-当您在xaml代码Text="{Binding App.ShortVersion}"中说时,幕后发生的事情是:

  1. Xamarin正在寻找您的BindingContext
  2. 如果找到这样的上下文,则遍历它以便找到所需的此属性
  3. 如果找不到上下文,则从逻辑上说什么也没有发生

因此,您的问题是您尚未设置BindingContext,这意味着您的页面/视图不知道从何处查找该const值。每个页面/视图/控件可以具有不同的绑定上下文。

每个页面都有自己的BindingContext设置是一种很好的做法。这意味着您将拥有MainPageViewModel.cs类。之后,您需要将页面的上下文设置为新创建的类,如下所示:

public MainPage()
{
    InitializeComponent();
    BindingContext = new MainPageViewModel();
}

如果绝对需要在App.xaml.cs文件中而不是在页面的viewModel中拥有值,则在MainPageViewModel中您将拥有一个属性,该属性将从App.ShortVersion中获取其值。

© www.soinside.com 2019 - 2024. All rights reserved.