【发布时间】:2014-05-22 15:42:24
【问题描述】:
作为 C#、WPF 和 MVVM 的新手,我正在将我的第一个应用程序原型从一个几乎完全在代码隐藏中实现的组件重构为 MVVM 模式。我的所有东西都运行良好:数据绑定、命令等。几乎所有东西都已移动到正确的位置,但我在试图弄清楚我应该如何处理文件时遇到了一点问题。
我的模型支持从远程电子设备发送和读取的大量数据。该数据在 VM 中进行转换,并通过绑定与 V 进行交换。用户可以选择将输出流式传输到 CSV。这可以通过 OpenFileDialog 或直接在文本框中输入文件名来完成。
我对两个考虑比较肯定(如果您不同意,请纠正我):
1) 可以在 V 中处理 OpenFileDialog 并将文件名通过绑定发送给 MV。我在其他讨论中看到了这个答案。
2) 我将实现一个文件处理程序类,该类将打开文件、检查权限、格式化 CSV 记录等。
我不确定应该如何进行文件检查。如果一个文件被锁定,或者没有被选中,或者已经存在,如何将其传达给 V 以便通知用户?在我对应用程序的第一次剪辑中,我只是在代码隐藏中实现了这个逻辑,这似乎不正确:
private bool CSVReady()
{
if (filenameTextbox.Text == "<no file selected>")
{
MessageBox.Show("Please select an output file.");
return false;
}
if (File.Exists(filenameTextbox.Text))
{
var r = MessageBox.Show("File already exists. Append to it?",
"File Warning",
MessageBoxButton.YesNo,
MessageBoxImage.Warning);
if (r == MessageBoxResult.No)
return false;
try
{
File.OpenWrite(filenameTextbox.Text).Close();
}
catch (IOException)
{
MessageBox.Show("File is already open. Please close it.");
return false;
}
}
else // file does not exist, create it and initialize the column labels.
{
if ((MessageBox.Show("File does not exist. Create it?", "File Creation", MessageBoxButton.YesNo, MessageBoxImage.Warning) ==
MessageBoxResult.No))
return false;
File.Create(filenameTextbox.Text).Close();
File.AppendAllText( // Blah blah blah
}
return true;
}
【问题讨论】:
-
善用“新手”这个词!