绑定设备镜像路径windowsphone 8.1



如何绑定设备镜像路径windowsphone。

下面是图像路径

"C://Data//Users//Public//Pictures//Camera Roll//WP_20141001_002.jpg"

感谢

我不确定在您的情况下,使用string是否是一个不错的选择-也许可以使用BitmapImage-从路径获取StorageFile,打开Stream然后设置BitmapImage-在这种情况下,您可以在转换器外执行异步操作。

如果您仍然想使用字符串,这是可能的,但需要一些特殊的方法-使用async方法和绑定。斯蒂芬·克利里写了一篇关于过时的MVVM的非常好的文章。根据文章和其他Stephen的回答,我制作了这样一个代码:

首先,我们必须定义一个转换器-这有点复杂,因为获取文件和流是异步的:

/// <summary>
/// Converter getting an image basing upon delivered path
/// </summary>
public class PathToImage : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        var task = GetImage((String)value);
        // the below class you will find in Stephen's answer mentioned above
        return new TaskCompletionNotifier<BitmapImage>(task);
    }
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    { throw new NotImplementedException(); }
    private async Task<BitmapImage> GetImage(string path)
    {
        StorageFile file = await StorageFile.GetFileFromPathAsync(path);
        using (var stream = await file.OpenAsync(FileAccessMode.Read))
        {
            BitmapImage image = new BitmapImage();
            image.SetSource(stream);
            return image;
        }
    }
}

在我们的页面中,我们将需要一个属性,我们将在绑定中使用该属性并设置DataContext:

public sealed partial class MainPage : Page, INotifyPropertyChanged
{
    private string imagePath;
    public string ImagePath
    {
        get { return imagePath; }
        set { imagePath = value; RaiseProperty("ImagePath"); }
    }
    public MainPage()
    {
        this.InitializeComponent();
        DataContext = this;
    }
    // rest of the code

当然,我们必须定义我们的绑定-例如,在XAML中,这有点棘手,因为首先我们必须将DataContext绑定到Task,然后将Source绑定到Result,这将在加载图像时引发:

<Image DataContext="{Binding ImagePath, Converter={StaticResource PathToImage}}" Stretch="Uniform"
       Source="{Binding Result} HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

一旦我们拥有了所有这些,我们就可以这样设置属性:

ImagePath = @"C:DataUsersPublicPicturesCamera RollWP_20141001_002.jpg";

我们应该在屏幕上看到结果。

最新更新