如果Xamarin Forms中的图像不同,即使图像URI相同,如何更改图像?

时间:2018-08-06 14:40:00

标签: image xamarin.forms carousel ffimageloading xamarin.ios-binding

我在Carousel视图中使用以下代码。我有图像,如果用户更改图像,它将保持WebURI不变。以下是UI流程。 1-用户转到个人资料 2-从个人资料,用户可以选择进入图像页面,用户可以在其中添加图像。用户添加图像时,将使用相同的WebURI保存到服务器。 3-现在,用户返回到“个人资料”页面。即使我在页面的外观上回忆起API并再次添加图片,它也会显示相同的图像。

实际上我正在使用FFImageLoading,但我也尝试使用简单的Image控件。

使用FFImageLoading

<StackLayout Orientation="Vertical" VerticalOptions="Center">
  <forms:CarouselView x:Name="MainCarosel" ItemsSource="{Binding Pictures}"  Position="{Binding Position}" IsVisible="{Binding IsImageVisible}" RelativeLayout.WidthConstraint=
    "{ConstraintExpression Type=RelativeToParent, Property=Width}" HeightRequest="375">
    <forms:CarouselView.ItemTemplate>
      <DataTemplate>
        <ff:CachedImage Source="{Binding .}" CacheDuration="0" Aspect="AspectFill" RelativeLayout.WidthConstraint=
    "{ConstraintExpression Type=RelativeToParent, Property=Width}" HeightRequest="375">
        </ff:CachedImage>
      </DataTemplate>
    </forms:CarouselView.ItemTemplate>
  </forms:CarouselView>
  <local:CarouselIndicators IsVisible="{Binding IsImageIndicatorVisible}" Margin="0,-30,0,0" IndicatorHeight="8" IndicatorWidth="8" UnselectedIndicator="icon_dot_off" SelectedIndicator="icon_dot_on" Position="{Binding Position}" ItemsSource="{Binding Pictures}" />
</StackLayout>

使用简单的图片

<StackLayout Orientation="Vertical" VerticalOptions="Center">
  <forms:CarouselView x:Name="MainCarosel" ItemsSource="{Binding Pictures}"  Position="{Binding Position}" IsVisible="{Binding IsImageVisible}" RelativeLayout.WidthConstraint=
    "{ConstraintExpression Type=RelativeToParent, Property=Width}" HeightRequest="375">
    <forms:CarouselView.ItemTemplate>
      <DataTemplate>
        <Image Aspect="AspectFill" RelativeLayout.WidthConstraint=
    "{ConstraintExpression Type=RelativeToParent, Property=Width}" HeightRequest="375">
          <Image.Source>
            <UriImageSource Uri="{Binding .}"
              CachingEnabled="false"/>
          </Image.Source>
        </Image>
      </DataTemplate>
    </forms:CarouselView.ItemTemplate>
  </forms:CarouselView>
  <local:CarouselIndicators IsVisible="{Binding IsImageIndicatorVisible}" Margin="0,-30,0,0" IndicatorHeight="8" IndicatorWidth="8" UnselectedIndicator="icon_dot_off" SelectedIndicator="icon_dot_on" Position="{Binding Position}" ItemsSource="{Binding Pictures}" />
</StackLayout>

ViewModel

public async Task Appearing()
{
    await getAllData();
}   

private async Task getAllData()
{
    ProfileData Profile =  GetProfile(); //API Call
    Pictures = new List<string>();
    //One Way binding with control
    Pictures = Profile.Pictures.Select(t => t.Value).ToList();  
}

0 个答案:

没有答案