2017-01-20 12 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プロパティにバインドしたいと考えています。 私はそれをインラインで書くとうまくいきます。しかし、私は窓にタイトルを持っていたいとは思わない。だから私はOnPlatformを書いてIosとDroidだけにするが、今はコンパイルする。xamlフォームxamlバインディングでOnPlatformが動作しない

+1

私はtypeArgumentは違うはずだと思いますが、どうすればいいのか分かりません。 –

答えて

3

XAMLで貼り付けたことを書くことを好むOnPlatformオブジェクトは、バインディングのターゲットであると仮定します文字列に変換し、OnPlatformはプラットフォームに応じて右stringを返します。

残念ながら、OnPlatformBindableObjectではないため、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を返し、それが表示タイトルをdoesntのが、私は、XAML

関連する問題