我有一个MainPage和MainPageViewModel,在viewmodel上,我具有以下属性,将一个listview绑定到:
public ObservableCollection<TargetDrawingModel> TargetDrawings { get; set; }
在视图模型上,我有以下方法(通过与我的按钮绑定到的相应命令运行:]
private void AddTargetDrawingClick()
{
DataAccess da = new DataAccess();
TargetDrawings.Add(da.AddtoTargetDrawingList());
}
最后,是DataAccess类中的AddToTargetDrawingList()方法:
public TargetDrawingModel AddtoTargetDrawingList()
{
TargetDrawingModel output = new TargetDrawingModel();
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "Select The Target Drawings To Add To Add To The Comparison";
openFileDialog.Filter = "Drawing (*.dwg) | *.dwg";
openFileDialog.Multiselect = true;
if (openFileDialog.ShowDialog() == true)
{
foreach (string file in openFileDialog.FileNames)
{
TargetDrawingModel targetDrawing = new TargetDrawingModel();
targetDrawing.DrawingPath = file;
return targetDrawing;
}
}
output.DrawingPath = "nothing added";
return output;
}
该方法可以添加文件,但是如果我的用户未选择图形(取消打开文件对话框),则我不想返回任何内容,但是,如果我不提供返回值,则该方法将不会生成,因为“并非所有代码路径都返回值”。这就是为什么我目前返回字符串“ nothing add”,但显然不会这样做的原因。
[我怀疑是因为我正在调用ObservableCollection<TargetDrawingModel>
上的Add方法。它要求我退货,但是我不确定如何做其他事情。
如何修改此方法,以允许用户取消选择任何内容?
在添加到集合之前验证结果:
在AddtoTargetDrawingList
方法中,您正在循环内执行一个返回语句,但是该方法将在遇到的第一个返回语句时退出,并且始终仅返回一个项目。如果要返回几个文件,可以使用yield return。这将方法变成迭代器。返回类型必须为IEnumerable<T>
。