Как сохранить путь моего нового изображения в базе данных в виде строки, чтобы после создания новой записи я мог видеть выбранное изображение? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть запись модели, в которой я хочу сохранить путь к своему изображению при выборе фотографии:

public class Record {
...
    public string ImageFile { get; set; }
}

У меня есть RecordEntry.xaml:

<Image x:Name="FileImage" 
            Source="{Binding Path=ImageFile, Converter={StaticResource ImageSourceConverter}}"
            WidthRequest="200"
            HeightRequest="200"
            HorizontalOptions="Center" 
            VerticalOptions="Center"/>
<Button Text="Pick Photo"
            BackgroundColor="Teal" 
            TextColor="White" 
            FontSize="40" 
            Clicked="PickPhotoClicked"/>

Итак, яу меня есть RecordEntry.cs, где я выбираю фотографию с помощью Plugin.Media:

 private async void PickPhotoClicked(object sender, EventArgs e)
    {
        await CrossMedia.Current.Initialize();
        if (!CrossMedia.Current.IsPickPhotoSupported)
        {
            await DisplayAlert("No Pick Photo", ":( No Pick Photo available", "OK");
            return;
        }

        _mediaFile = await CrossMedia.Current.PickPhotoAsync();
        if (_mediaFile == null)
        {
            return;
        }

        await DisplayAlert("File Path", _mediaFile.Path, "OK");

        FileImage.Source = ImageSource.FromStream(() =>
        {
            return _mediaFile.GetStream();
        });
    }

После того, как я выбрал фотографию, я хочу сохранить путь и привязать его к ImageFile , и я хочусм. мое фото, когда я снова открою эту запись.

1 Ответ

0 голосов
/ 08 ноября 2019

Вы можете использовать Xamarin.Essentials: Настройки для хранения и чтения File Path.

Сохранение пути:

private async void PickPhotoClicked(object sender, EventArgs e)
{

    //...
    await DisplayAlert("File Path", _mediaFile.Path, "OK");

    //Store your path here
    Preferences.Set("my_File_Path", _mediaFile.Path);

    FileImage.Source = ImageSource.FromStream(() =>
    {
        return _mediaFile.GetStream();
    });
}

Используйте путь: , используйте ImageFile, если он существует:

public Record _record{ get; set; }

protected override void OnAppearing()
{
    base.OnAppearing();

    _record = new Record();
    string myValue = Preferences.Get("my_File_Path", "default_value");
    _record.ImageFile = myValue;

    BindingContext = _record;
}

И в вашем ImageSourceConverter преобразуйте imagePath в ImageSource:

public class myImageSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var path = (string)value;
        return ImageSource.FromFile(path);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Я загрузил образец здесь и сообщите мне, если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...