【问题标题】:Bind XAML "Label" to Code Behind "public const" in Xamarin.Forms?将 XAML“标签”绑定到 Xamarin.Forms 中“公共常量”后面的代码?
【发布时间】:2020-06-03 11:03:54
【问题描述】:

如何使用 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;
}

【问题讨论】:

  • 你的 BindingContext 是什么?

标签: c# xaml xamarin.forms data-binding constants


【解决方案1】:

根据您的评论,我发现您不熟悉绑定在 Xamarin 中的工作方式。我强烈建议你仔细阅读Data Binding Basics

不过,您的问题的答案是 - 是的,您可以将其绑定到 const 变量。但是,该变量必须是公开的。

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

  1. Xamarin 正在寻找您的 BindingContext
  2. 如果找到这样的上下文,则会遍历它以找到您想要的这个属性
  3. 如果没有找到上下文,则逻辑上什么都没有发生

所以,你的问题是你没有设置你的BindingContext,这意味着你的页面/视图不知道从哪里寻找这个常量值。您可以为每个页面/视图/控件设置不同的绑定上下文。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2020-02-19
    • 2018-09-12
    • 2016-05-16
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多