2017-01-20 76 views
0
<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上,但現在它編譯。xamarin形式xaml OnPlatform無法在綁定上工作

+1

我認爲typeArgument應該是不同的,但我不知道它應該是什麼 –

回答

3

您粘貼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

+0

非常感謝 –

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

我設置正常結合,但是我對於Windows返回null,它不顯示標題,但我喜歡寫在XAML