如何使用Xamarin和MVVM在XAML中动态更改图像源

5

我正在尝试更改ContentPage上图像源属性。 我使用绑定上下文来实现这一点。 但是,即使我在我的模型视图中更改了源,这也不会更新我的视图中的图像。

UpdateMethod()
{
    imageSource1 = imageSource[1];
}

public string ImageSource1
{
    get
    {
        return imageSource1;
    }

    set
    {
        imageSource1 = value;
        this.Notify("ImageSource1");
    }
}

XAML代码如下:
<ContentView HorizontalOptions="Center" Grid.Row="0" >
    <Image ClassId = "1" Source="{Binding ImageSource1}" BindingContextChanged="Handle_BindingContextChanged">
        <Image.GestureRecognizers>
            <TapGestureRecognizer  Command="{Binding OnTapGestureRecognizerTappedCommand1}" NumberOfTapsRequired="1" />
        </Image.GestureRecognizers>
    </Image>            
</ContentView>
3个回答

4

Image组件接受ImageSource(FileImageSource, StreamImageSource等)。幸运的是,ImageSource类对于字符串有隐式操作符,可以根据格式(URL或路径)自动从字符串创建自身。请查看下面的示例:

Xaml

<Image Source="{Binding ImagePath}">
  <Image.GestureRecognizers>
    <TapGestureRecognizer Command="{Binding ImageTapCommand}" />
  </Image.GestureRecognizers>
</Image>

ViewModel.cs:

public class SomeViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public ICommand ImageTapCommand { get; set; }


    private string imagePath;
    public string ImagePath
    {
        get { return imagePath; }
        set
        {
            imagePath = value;
            PropertyChanged(this, new PropertyChangedEventArgs("ImagePath"));
        }
    }

    public SomeViewModel()
    {
        ImageTapCommand = new Command(CmdTapImage);
    }


    private void CmdTapImage()
    {
        ImagePath = YourNewImagePath;
    }
}

如何更改ListView中的图像显示时间? - Thamarai T

1
当您绑定ImageSource时,请使用Xamarin.Forms.ImageSource作为属性的返回类型。或者,如果您正在指定文件路径,则可以使用其派生类,例如FileImageSource。还要确保该路径存在于本机项目中。

1

首先在您的视图模型中添加ImageSource,不要忘记包含Xamarin.Forms依赖项...

    private ImageSource _imageSource;
public ImageSource ImageSource
{
    get { return _imageSource; }
    set
    {
        _imageSource= value;
        PropertyChanged(this, new PropertyChangedEventArgs("ImageSource"));
    }
}

在此之后,将源绑定包含在您的XAML文件中:
     <Image Source="{Binding ImageSource}">
        <!--<Image.GestureRecognizers>
            <TapGestureRecognizer Command="{Binding ImageTapCommand}" />
        </Image.GestureRecognizers>-->
    </Image>

这是一个“prism示例”。
        private ImageSource _imageSource;
    public ImageSource ImageSource
    {
        get { return _imageSource; }
        set { SetProperty(ref _imageSource, value); }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接