2016-03-27 20 views
0

Hallo binden ich verschiedene Bilder in Listenansicht je nach Gerätetyp unterXamarin XAML Idiom mit Bild

<ContentPage.Resources> 
    <ResourceDictionary> 
     <local:Base64ToImageConverter x:Key="btoi"></local:Base64ToImageConverter> 
    </ResourceDictionary> 
    </ContentPage.Resources> 
<ListView x:Name="lvImages" 
       VerticalOptions="FillAndExpand" 
       SeparatorVisibility="Default" 
       ItemsSource="{Binding Images}" 
       ItemSelected="lvImages_Selected" 
       HasUnevenRows="True" 
       SelectedItem="{Binding SelectedImage}" 
       IsPullToRefreshEnabled="True" 
       CachingStrategy="RecycleElement" 
       RefreshCommand="{Binding RefreshCommand}" 
       BackgroundColor="#009688" 
       SeparatorColor="#FFFFFF" > 
     <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
      <!--<Image Source="{Binding PhoneImageData,Converter={StaticResource btoi}}" />--> 
      <Image> 
      <Image.Source> 
       <Binding Converter="{StaticResource btoi}"> 
       <Path> 
        <OnIdiom x:TypeArguments="String"> 
        <OnIdiom.Phone> 
         PhoneImageData 
        </OnIdiom.Phone> 
        <OnIdiom.Tablet> 
         TabletImageData 
        </OnIdiom.Tablet> 
        </OnIdiom> 
       </Path> 
       </Binding> 
      </Image.Source> 
      </Image> 
      </ViewCell> 
     </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

aber ich erhalte eine Fehler Zeichenfolge nicht gefunden in xamarin.forms.xaml wie gezeigt zeigen wollte, bitte Hilfe ..

Antwort

0

Verwenden Sie x:TypeArguments="x:String" anstelle von x:TypeArguments="String".

Sie müssen für jeden Typverweis einen Namespace angeben, sofern er nicht im Standardnamensraumkontext der XML-Datei vorhanden ist. Der Standardkontext ist fast immer Xamarin.Forms.Xaml wegen der Deklaration auf dem Stamm-XML-Knoten von xmlns="http://xamarin.com/schemas/2014/forms", aber String ist im System Namensraum. Standardmäßig werden die grundlegenden .NET-Datentypen (einschließlich String und andere) in xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" mit Aliasnamen versehen, weshalb Sie das Präfix x: benötigen.

+0

Danke das hat funktioniert – Krishna

0

das probieren Sie (obwohl ich nicht sicher bin, was Sie mit Ihrem Binding Eigenschaft zu tun versuchen:

<OnIdiom x:TypeArguments="ImageSource" 
     Phone="PhoneImageData.png" 
     Tablet="TabletImageData.png"/> 

Edit: um es besser Gel mit Ihrem Beispiel zu machen:

<ContentPage.Resources> 
    <ResourceDictionary> 
     <OnIdiom x:Key="image" 
       x:TypeArguments="ImageSource" 
       Phone="PhoneImageData.png" 
       Tablet="TabletImageData.png"/> 
    </ResourceDictionary> 
</ContentPage.Resources> 

<Image Source="{StaticResource image}"/> 

Edit # 2: Ok, das mehr Sinn macht. Dann würde ich vorschlagen, das BindingContextChanged() zu verwenden und dann das Device.Idiom Check in diesem Ereignisabonnement zu verwenden. Sie können this Post verwenden, um zu sehen, wie das geht. Sie können festlegen, dass Ihr Bild binging zu was immer, und dann in BindingContextChanged() können Sie es auf was auch immer base64 konvertiert Bild, das Sie wollen, zurücksetzen.

Wenn Sie auf Probleme stoßen, lassen Sie es mich wissen!

+0

PhoneImageData oder TabletImageData ist eine Base64-Zeichenfolge, die aus der Datenbank als Eigenschaft im Listenelement kommt. Also muss ich dort verbindlich verwenden. Das Bild ist in der Liste – Krishna

+0

@Kris checken Sie die zweite Bearbeitung aus. – hvaughan3