【问题标题】:WinRT Access Violation Copying File in Local StorageWinRT 访问冲突在本地存储中复制文件
【发布时间】:2015-03-18 23:59:59
【问题描述】:

什么是更新(替换)本地存储中的图像的好方法,该图像绑定到导航堆栈中的图像控件。

更具体地说:我在页面 A (ViewProfile.xaml) 中显示图像,图像源绑定到 ViewModel 集中的属性 ImageSource,使用

ImageSource= "ms-appdata:///local/image.jpg";

在第二页 B (EditProfile.xaml) 中,我想再次显示图像并为用户提供更改它的选项,例如通过使用替换文件

StorageFolder destinationFolder = ApplicationData.Current.LocalFolder;
await profileImage.CopyAsync(destinationFolder, "image.jpg", NameCollisionOption.ReplaceExisting);

当用户在后台堆栈中返回时,更改后的图像将显示在页面 B 和页面 A 上。

CopyAsync() 因未授权访问违规而失败。我的理解是,将图像绑定在第一页上会有效地锁定文件,因此无法更改。由于页面 A 实际上并没有对图像进行任何处理,只是显示它并且可能在更新后重新加载它,因此无需锁定文件。

在 Windows 8.1 (WinRT) 手机应用程序中解决此问题的正确方法是什么?

【问题讨论】:

    标签: c# mvvm windows-runtime windows-phone-8.1 winrt-xaml


    【解决方案1】:

    您可以将上一页的 observablecollection 设置为 null 以在对您正在修改的实际图像文件进行更改之前触发属性更改事件。 然后您可以将 observablecollection 重置回正确的数据源以相应地重置数据上下文。

    试试看是否有帮助。

    【讨论】:

    • 感谢您的回答。两个页面中的控件都绑定到相应(Prism)ViewModel 的各个属性。属性更改事件由 setter 触发。我现在已经在第一页的viewmodel的OnNavigatedFrom()方法中设置了ImageSource = null,并回到了OnNavigatedTo()中的图像文件。仍然得到未经授权的访问异常。我是否正确应用了您的建议?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    相关资源
    最近更新 更多