【问题标题】:Xamarin.Forms XAML binding to x:StringXamarin.Forms XAML 绑定到 x:String
【发布时间】:2021-09-30 22:18:47
【问题描述】:

有没有办法从 XAML 动态分配 Picker.Items?

类似:

<Picker x:Name="pckTheme">
    <Picker.Items>
        <x:String>{Binding Option1Text}></x:String>
        <x:String>{DynamicResource Option2Text}></x:String>
    </Picker.Items>
</Picker>

(当然,此示例不起作用)。

据我所知,Picker.Items 中唯一允许的类型是 x:String,我似乎找不到任何绑定到 x:String 的方法。

从代码中执行此操作相对简单,但如果可能的话,我更喜欢直接从 XAML 中执行此操作。

这里的目标是本地化资源文件中的内容,但其他用途可能会派上用场。

【问题讨论】:

  • 绑定值怎么样?这不适合你吗?
  • 这就是我想要做的。它似乎不适用于
  • 我认为您可以从资源文件中读取信息(您的字符串)并将其插入到列表中,然后绑定到 Picker...
  • 谢谢。我现在就是这样做的。但是我还需要处理代码中的运行时语言更改,这就是我想从 XAML 中进行此操作的原因。

标签: xaml xamarin.forms


【解决方案1】:

通常,您会将Picker 绑定到一个项目列表,该列表可以是您想要的动态。如果您问我,将它们作为硬编码项目放在那里并不是真正动态分配的。您可以做的是创建一个 ValueConverter 以在您的 XAML 中使用,以获取键的语言特定值并将 Picker 绑定到键列表。

【讨论】:

  • 我正在尝试从 XAML 中获取尽可能多的信息。如果可以的话,想法是使用 Resources 中的 {Strings.keyValue},因此本地化将由 Xamarin.forms 本身处理。所以我认为这不是硬编码。
【解决方案2】:

请使用以下 XAML 代码:

<x:Array Type="{x:Type x:String}">
<x:Static Member="local:AppResources.Events"/>
<x:Static Member="local:AppResources.Device"/>
<x:Static Member="local:AppResources.Biographical"/>
</x:Array>

本地在哪里:

xmlns:local="clr-namespace:YOURNAMESPACE"

【讨论】:

    【解决方案3】:

    &lt;x:string&gt; 仅支持常量值。您可以通过Markup Extension 解决此问题

    它的功能很简单:它返回它的参数。

    using System;
    using Xamarin.Forms.Xaml;
    
    namespace YOURAPP.Extensions
    {
        public class StringExtension : IMarkupExtension
        {
            public string Value { get; set; }
    
            public object ProvideValue(IServiceProvider serviceProvider)
            {
                return Value;
            }
        }
    }
    
    

    在视图中像这样使用它:

    1. xmlns:ext="clr-namespace:YOURAPP.Extensions" 添加到根元素
    2. &lt;ext:StringExtension Value="{anything here}" /&gt; 否则你会想要 &lt;x:string&gt;

    请注意,这会导致Add 被调用到IEnumerable。对于选择器,它开箱即用。对于自定义控件,它需要初始化(以避免NullReferenceException)和ObservableCollection 以确保在添加时更新视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      相关资源
      最近更新 更多