2016-05-06 13 views
5

gösterin görüntü Burada Xamarin ve XAML şeyler için oldukça yeni ve şimdiye kadar (sadece Android kullanan) Android & iPhone tarafından kullanılan seyyar projede yaptık budur (JSON yüklenen) .csXamarin base64 dize

[JsonProperty("image")] 
    private string ImageBase64 { get; set; } 

    [JsonIgnore] 
    private Xamarin.Forms.Image _image = null; 

    [JsonIgnore] 
    public Xamarin.Forms.Image Image 
    { 
     get 
     { 
      if (_image == null) 
      { 
       _image = new Xamarin.Forms.Image() 
       { 
        Source = Xamarin.Forms.ImageSource.FromStream(() => new MemoryStream(Convert.FromBase64String(ImageBase64))), 
        BackgroundColor = Color.White, 
        WidthRequest = 64, 
        HeightRequest = 64, 
       }; 
       OnPropertyChanged("Image"); 
      } 
      return _image; 
     } 
     private set 
     { _image = value; } 
    } 

ItemsView.xaml: doğru benim etiketleri görüntülenen olsun ama görüntüsü değil

<StackLayout VerticalOptions="FillAndExpand" Padding="5,20,5,0" > 
    <Label Text="Items" VerticalOptions="Center" Font="35" HorizontalOptions="Center" /> 
    <ListView x:Name="list" ItemsSource="{Binding Items}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <ImageCell 
         Text="{Binding ItemName}" 
         Detail="{Binding Infos, StringFormat='{0}'}" 
      Image.Source="{Binding Path=Image}"> 
     </ImageCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    </ListView> 
</StackLayout> 

. birisi yanlış yapıyorum bana açıklayabilir misiniz?

+0

2 şey bana atlamak: a) bir ImageSource'ı bir Görüntü'ye bağlamanız b) "Path =" gereksiz – Jason

cevap

6

ben Xamarin hiç kullanmadıysanız, ancak bu kodla bazı bariz sorunlar vardır. Eğer görünüşte bir ImageCell en ImageSource özelliği bağlamak istediğiniz gibi

sizin Image mülkiyet türü, ImageSource değil Image olmalıdır. Bunun yanı sıra, asla çalışan bir özellik gaz giderici içinde OnPropertyChanged çağırmadan önce görevden aldığı PropertyChanged olay çünkü bir bağlayıcı (veya başka bir tüketici) değişmiş bir özellik değerini elde edebilirsiniz. Yerine Image.Source="{Binding ...} ait

, doğru bağlayıcı

<ImageCell ... ImageSource="{Binding Path=Image}" /> 

özellikleri şöyle beyan edilmelidir olması gerekir:

private string imageBase64; 
public string ImageBase64 
{ 
    get { return imageBase64; } 
    set 
    { 
     imageBase64 = value; 
     OnPropertyChanged("ImageBase64"); 

     Image = Xamarin.Forms.ImageSource.FromStream(
      () => new MemoryStream(Convert.FromBase64String(imageBase64))); 
    } 
} 

private Xamarin.Forms.ImageSource image; 
public Xamarin.Forms.ImageSource Image 
{ 
    get { return image; } 
    set 
    { 
     image = value; 
     OnPropertyChanged("Image"); 
    } 
} 

Eğer gerçektenImage mülkiyet değerinin tembel oluşturulmasını gerekiyorsa , bunun salt okunur yapmak ve ImageBase64 setter gelen OnPropertyChanged edebilsem--:

private string imageBase64 
public string ImageBase64 
{ 
    get { return imageBase64; } 
    set 
    { 
     imageBase64 = value; 
     OnPropertyChanged("ImageBase64"); 
     OnPropertyChanged("Image"); 
    } 
} 

private Xamarin.Forms.ImageSource image; 
public Xamarin.Forms.ImageSource Image 
{ 
    get 
    { 
     if (image == null) 
     { 
      image = Xamarin.Forms.ImageSource.FromStream(
       () => new MemoryStream(Convert.FromBase64String(ImageBase64))); 
     } 
     return image; 
    } 
} 
+0

Çalıştı, teşekkürler :) –