如何绑定设备图像路径窗口手机。
以下是图片路径
"C://Data//Users//Public//Pictures//Camera Roll//WP_20141001_002.jpg"
由于
答案 0 :(得分:3)
我不确定在您的情况下使用 string 是否是一个不错的选择 - 也许可以使用 BitmapImage - 获取 StorageFile from path,打开 Stream ,然后设置 BitmapImage - 在这种情况下,您可以在转换器外执行 async 操作。
如果您仍想使用 string ,则可能需要一些特殊方法 - 使用 async 方法和绑定。关于异步MVVM的There is a very good article,由Stephen Cleary编写。基于文章和other Stephen's answer我已经制作了这样的代码:
首先,我们必须定义一个 Converter - 它有点复杂,因为获取文件和流是异步的:
/// <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:\Data\Users\Public\Pictures\Camera Roll\WP_20141001_002.jpg";
我们应该在屏幕上看到结果。