<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上使用它,但现在它编译了。
答案 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中编写