如何绑定设备镜像路径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";
我们应该在屏幕上看到结果。