xamarin 形成 xaml OnPlatform 无法处理绑定

Posted

技术标签:

【中文标题】xamarin 形成 xaml OnPlatform 无法处理绑定【英文标题】:xamarin forms xaml OnPlatform not working on bindings 【发布时间】:2017-06-05 06:10:09 【问题描述】:
    <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>

所以我有选择器,我想将它的标题绑定到 ThemePickerTitle 属性。 如果我将它写为内联属性,它会很好地工作。但我不想在 Windows 上有标题。所以我写了 OnPlatform 让它只在 Ios 和 Droid 上运行,但现在它可以编译了。

【问题讨论】:

我觉得typeArgument应该不一样,但是不知道应该是什么 【参考方案1】:

您粘贴的 Xaml 假设 OnPlatform 对象是 Binding to string 的目标,然后 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 年 1 月 24 日),这在 Xamarin.Forms 中不起作用,但要修复的补丁已经准备好并将在下一个版本中登陆:https://github.com/xamarin/Xamarin.Forms/pull/709。

【讨论】:

非常感谢

以上是关于xamarin 形成 xaml OnPlatform 无法处理绑定的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 形成如何修复 NavBar

Xamarin 形成 MVVM Stacklayout 内容绑定

Xamarin XAML语言教程XAML文件结构与解析XAML

Xamarin.Forms 在 XAML 中使用局部变量

Xamarin XAML语言教程基础语法篇大学霸

XAML中的Xamarin.Forms ListView AutoHeight