从ViewModel绑定Plugin.Media

时间:2018-07-10 20:07:41

标签: mvvm xamarin.forms

我有一个处理Plugin.Media的视图模型,可以从手机上拍照。除非我在下面的代码中有下面的代码(查看模型),否则该图像不会显示,然后它可以正常工作,这使我学习MVVM的目标无效。我也尝试过'$output = array(); foreach($input as $fruit){ $output[$fruit['id']][] = $fruit; } ',并以各种方式使用'FileImageSource'。

有人可以解释我在做什么错吗?

查看模型:

Source'

XAML:

public string FilePath { get => _filepath; set { _filepath = value; OnPropertyChanged(); } }
private string _filepath;

public Command CaptureImage
    {
        get
        {
            return new Command(TakePicture);
        }
    }

//

private async void TakePicture()
{
        if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
        {
            //say something
            return;
        }

        var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
        {
            Directory = "FoodSnap",
            Name = GetTimestamp(DateTime.Now),
            PhotoSize = Plugin.Media.Abstractions.PhotoSize.Custom,
            CustomPhotoSize = 50
        });

        if (file == null)
            return;

        FilePath = file.Path;            

}

1 个答案:

答案 0 :(得分:0)

如果要在视图模型中使用此视图,请将视图模型的实例分配给页面的Aylmers, Ancaster ,因此,这基本上是代码后面的唯一一行。

BindingContext

现在应该可以了。

更新

从您的XAML中,我看到:

public YourPage()
{
    InitializeComponent();

    BindingContext = new YourViewModel();
}

其中<Image.Source> <StreamImageSource Stream="{Binding NewImage}"/> </Image.Source> Stream的一种,但是您要为其分配一个Stream。您可以简单地执行以下操作:ImageSource