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> 

Ich habe also Picker und ich möchte seinen Titel an ThemePickerTitle Eigenschaft binden. Es funktioniert gut, wenn ich es als Inline-Attrubute schreibe. Aber ich möchte keinen Titel auf Windows haben. Also schreibe ich OnPlatform, um es nur auf Ios und Droid zu haben, aber jetzt kompiliert es.Xamarin Formen Xaml OnPlatform funktioniert nicht auf Bindungen

+1

Ich denke, typeArgument sollte anders sein, aber ich weiß nicht, was es sein sollte –

Antwort

3

XAML Sie vermuten, geklebt, dass das OnPlatform Objekt ist das Ziel der Bindung zu zeichnen, und dann gibt die OnPlatform das Recht string abhängig von der Plattform zurück.

Leider funktioniert das nicht, weil OnPlatform kein BindableObject ist und nicht das Ziel eines Binding sein kann.

Was Sinn macht, wird mit diesem 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> 

Es bedeutet, dass die OnPlatform das Recht gibt Binding (ohne es zu Auswertung) in Abhängigkeit von der Plattform. Ab heute (24.01.2017) funktioniert dies nicht mehr in Xamarin.Forms, aber der zu reparierende Patch ist fertig und landet in einer der nächsten Versionen: https://github.com/xamarin/Xamarin.Forms/pull/709.

+0

Vielen Dank –

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

ich normale Bindung gesetzt, aber ich null zurück für Windows, spielt es keine Anzeige Titel, aber ich ziehe das

in XAML schreiben
Verwandte Themen