xamarin表示xaml OnPlatform无法处理绑定

时间:2017-01-20 09:47:01

标签: c# xaml xamarin binding xamarin.forms

    <cv:BindableComboBox ItemsSource="{Binding Themes}" SelectedValue="{Binding SelectedTheme}">
      <cv:BindableComboBox.Title>
        <OnPlatform x:TypeArguments="x:String"
            iOS="{Binding ThemePickerTitle}"
            Android="{Binding ThemePickerTitle}"/>
      </cv:BindableComboBox.Title>
    </cv:BindableComboBox>

所以我有选择器,我想将其Title绑定到ThemePickerTitle属性。 如果我将其写为内联attrubute,它的效果很好。但我不想在Windows上拥有头衔。所以我写OnPlatform只在Ios和Droid上使用它,但现在它编译了。

2 个答案:

答案 0 :(得分:6)

您粘贴的Xaml假设OnPlatform对象是绑定到字符串的目标,然后OnPlatform返回右string,具体取决于平台。

不幸的是,这不起作用,因为OnPlatform不是BindableObject而不能成为Binding的目标。

有意义的是,使用这个Xaml:

<cv:BindableComboBox ItemsSource="{Binding Themes}" SelectedValue="{Binding SelectedTheme}">
  <cv:BindableComboBox.Title>
    <OnPlatform x:TypeArguments="BindingBase"
        iOS="{Binding ThemePickerTitle}"
        Android="{Binding ThemePickerTitle}"/>
  </cv:BindableComboBox.Title>
</cv:BindableComboBox>

这意味着OnPlatform会返回正确的绑定(不进行评估),具体取决于平台。截至今天(2017-01-24),这在Xamarin.Forms中不起作用,但修复它的补丁已经准备就绪,将在下一个版本之一登陆:https://github.com/xamarin/Xamarin.Forms/pull/709

答案 1 :(得分:0)

    public string ThemePickerTitle
    {
        get
        {
            if (Device.OS == TargetPlatform.Windows || Device.OS == TargetPlatform.WinPhone)
                return null;
            return _stringsManager.GetString("ChooseTheme");
        }
    }

我设置正常绑定但是我为Windows返回null,它没有显示标题,但我更喜欢在XAML中编写