我的應用程序在屏幕上顯示圖像(圖像基於本地計算機上的文件),用戶可以根據需要將其刪除。在DataContext中使用時無法刪除文件
每次我試圖刪除它導致以下錯誤消息的文件:
"The process cannot access the file 'C:\\Users\\Dave\\Desktop\\Duplicate\\Swim.JPG' because it is being used by another process."
我理解的錯誤消息。
我有一個UserControl
它接受一個文件路徑(通過構造函數中的一個參數),然後綁定到它的(UserControl)DataContext
。
作爲調試此問題的一部分,我發現問題是由於在UserControl中設置DataContext。如果我從我的UserControl中刪除this.DataContext = this;
,那麼我可以刪除該文件。
所以,我TestUnit看起來像
Ui.UserControls.ImageControl ic = new ImageControl(
@"C:\Users\Dave\Desktop\Duplicate\Swim.JPG");
try
{
File.Delete(@"C:\Users\Dave\Desktop\Duplicate\Swim.JPG");
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
的用戶控件代碼隱藏
public ImageControl(string path)
{
this.FilePath = path;
this.DataContext = this; // removing this line allows me to delete the file!
InitializeComponent();
}
#region Properties
private string _filePath;
public string FilePath
{
get { return _filePath; }
set
{
_filePath = value;
OnPropertyChanged("FilePath");
}
}
如果它的事項,我的用戶XAML使用 '圖像' 的控制,勢必 '文件路徑'
我已經嘗試使用UserControl null刪除之前,這沒有幫助。
我已經嘗試添加IDisposible接口到我的UserControl和Dispose()
方法設置this.DataContext = null;
但這並沒有幫助。
我在做什麼錯?我怎樣才能刪除這個文件(或者更準確地說,使它不被使用)。
嘗試在刪除之前設置FilePath null。 – Paparazzi
嗨@Blam,通過設置'this.DataContext = null;'它的FilePath爲空(FilePath是一個屬性)。但是,要真正確定,我也嘗試手動將其設置爲空,並且可悲的是它沒有任何區別。 – Dave
將DataContext設置爲null並且從不分配它是不一樣的。 – Paparazzi