2017-10-06 12 views
0

現在、Xamarin CrossPlatformプロジェクトで作業中で、ObservableCollectionにバインドされたListviewが実装されています。 ListViewからItemを削除するまで、すべてうまく動作します。リストビュー内のフォローアップ項目の画像はランダムに消えます。その都度、すべての画像と異なる量の画像が毎回消えます。私はそれがMemoryStreamと何か関係があると思いますが、私は何を変えなければなりませんか? Here's ListViewコントロールにバインドされている私のモデルの関連部分:アイテムを削除するとListViewで画像が消える

public string ImageBase64 
    { 
     get 
     { 
      return imagebase64; 
     } 
     set 
     { 
      if (imagebase64 != value) 
      { 
       imagebase64 = value; 
       OnPropertyChanged(nameof(ImageBase64)); 
       OnPropertyChanged(nameof(ImageSource)); 
      } 
     } 
    } 

    public ImageSource ImageSource 
    { 
     get 
     { 
      if (!string.IsNullOrEmpty(imagebase64)) 
      { 
       return ImageSource.FromStream(() => new MemoryStream(Convert.FromBase64String(imagebase64))); 
      } 
      else 
      { 
       return null; 
      } 
     } 
    } 

Here's関連XAML:

<ListView x:Name="listView" Margin="20" ItemsSource="{Binding}" ItemSelected="OnListItemSelected" HasUnevenRows="True" SeparatorColor="{StaticResource primaryGreen}" SeparatorVisibility="Default"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <Grid Margin="0,5,0,5"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="auto" /> 
         <RowDefinition Height="auto" /> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="65" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="45" /> 
        </Grid.ColumnDefinitions> 
        <Image Grid.Column="0" Grid.RowSpan="3" Margin="-2,-2,-2,-2" Source="{Binding ImageSource}" HorizontalOptions="Start" VerticalOptions="Center" Aspect="AspectFill"/> <!-- This is the displayed Image --> 
        <Label Margin="10,0,0,0" Grid.Column="1" Grid.Row="0" FontAttributes="Bold" FontSize="18" TextColor="{StaticResource primaryGreen}" Text="{Binding VorNachname}" VerticalTextAlignment="Start" HorizontalTextAlignment="Start"/> 
        <Label Margin="10,0,0,0" Grid.Column="1" Grid.Row="1" Text="{Binding MediumSelected.Wert, StringFormat='via {0}'}" HorizontalOptions="FillAndExpand" VerticalTextAlignment="Start" HorizontalTextAlignment="Start"/> 
        <StackLayout Margin="10,0,0,0" Grid.Column="1" Grid.Row="2" Orientation="Horizontal" HorizontalOptions="FillAndExpand"> 
         <Label Text="{Binding Alter,StringFormat='Alter: {0}'}" VerticalTextAlignment="Start" HorizontalTextAlignment="Start" HorizontalOptions="Start"/> 
        </StackLayout> 
        <StackLayout Margin="0,0,0,-5" Grid.Column="2" Grid.RowSpan="3" Orientation="Vertical" HorizontalOptions="End" VerticalOptions="End"> 
         <Button WidthRequest="40" HeightRequest="40" BackgroundColor="White" BorderWidth="0" BorderColor="White" Image="socialmedia_18.png" Clicked="OnChangeClicked" CommandParameter ="{Binding}" VerticalOptions="EndAndExpand" /> 
         <Button Margin="0,-15,0,0" WidthRequest="40" HeightRequest="40" BackgroundColor="White" BorderColor="White" Image="cancel_18.png" Clicked="OnDeleteClicked" CommandParameter ="{Binding}" VerticalOptions="End" /> 
        </StackLayout> 
       </Grid> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

...と後ろのコード:

async void OnDeleteClicked(object sender, EventArgs e) 
    { 
     Helper.TrackEvent("PeopleList_OnDeleteClicked"); 
     //Get selected Person 
     Person person = (Person)((Button)sender).CommandParameter; 

     //Remove from Model 
     DBHelper.DBModel.People.Remove(person); 

     //Update database 
     App.Database.UpdateWithChildren(DBHelper.DBModel); 
    } 

編集: 画像のサイズを変更しても同じ問題は解決しません。私はListViewItemImageにtestvariable ImageSourceThumbを結合することによって、それを試してみました:

public ImageSource ImageSourceThumb 
    { 
     get 
     { 
      if (!string.IsNullOrEmpty(imagebase64)) 
      { 
       return ImageSource.FromStream(() => new MemoryStream(ImageResizer.ResizeImage(Convert.FromBase64String(imagebase64), 64, 64))); 
      } 
      else 
      { 
       return null; 
      } 
     } 
    } 

答えて

0

私は同様の問題がありました。リストビューを読み込んだり更新したりすると、すべての画像が表示されませんでした。

イメージのサイズを変更して問題を修正しました。巨大な画像が私にアウトメモリの例外を与えました。これらの画像をより小さな解像度にリサイズすることで、これらの問題を解決しました。

+0

こんにちは!回答ありがとうございます。私はそれを試してみて、それは問題を解決しません。その他の提案はありますか? – Chris

関連する問題