我正在寻找有关以下方案设计的一些建议:
高级别信息:
流量和问题:
但是我不知道如何设计最后一步,即我应该:
我的表单中有一些公共方法可以被调用,因此它本身就是:
或者:
谢谢!
答案 0 :(得分:4)
这样的事情:
interface IPresentationService
{
bool ShowInDialog(ViewModel viewModel);
}
class CarViewModel : ViewModel {}
class MainViewModel : ViewModel
{
[Import]
private IPresentationService presentationService;
private void AddNewCar()
{
var car = new CarViewModel();
if (presentationService.ShowInDialog(car))
{
Cars.Add(car);
}
}
public MainViewModel()
{
Cars = new ObservableCollection<CarViewModel>();
AddNewCarCommand = new RelayCommand(AddNewCar);
}
public ObservableCollection<CarViewModel> Cars { get; private set; }
public ICommand AddNewCarCommand { get; private set; }
}
其中IPresentationService
是一项服务,用于创建和显示弹出窗口。 IPresentationService
的实例可以通过服务位置或依赖注入获得([Import]
表示使用MEF进行依赖注入)。
答案 1 :(得分:0)
由于MainView有一个New Car按钮,Main ViewModel可能有一个属性NewCar。
您可以在单击按钮时创建汽车的新实例,并将实例传递给允许用户输入新车值的对话框。
当对话框关闭时,主视图可以针对汽车收集进行任何其他验证(唯一牌照),当发现正确时,将新车添加到汽车收藏中并可能将此添加/更改传播到模型
这样,对话框负责汽车的细节,主视图负责将汽车添加到集合中。