我有以下内容: - 类AccountViewModel:BaseViewModel - AccountView.xaml
我很难将参数传递给ModelView。
在主窗口中,我将它们绑在一起:<DataTemplate DataType="{x:Type local:AccountViewModel}">
<local:AccountView />
</DataTemplate>
在mainWindowViewModel中,我有一个操作来执行以下操作来显示帐户视图:
ChangeViewModel(new AccountViewModel(new DateTime(2016, 2, 06), new DateTime(2016, 2, 15)))
如您所见,AccountViewModel为其构造函数提供了2个参数,2个Datetime。
然后在AccountView中,我尝试通过执行以下操作来创建DataContext:
<UserControl.DataContext>
<ObjectDataProvider ObjectType="local:AccountViewModel"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<ObjectDataProvider.ConstructorParameters>
<sys:DateTime></sys:DateTime>
<sys:DateTime></sys:DateTime>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
</UserControl.DataContext>
无论我做什么,它都会创建另一个AccountViewModel实例。我不希望这样,我希望这个AccountView继续使用我在上面显示的命令中创建的AccountViewModel,但我也想使用绑定功能。如果可能的话,我宁愿尽量避免使用代码。
我怎样才能做到这一点?
答案 0 :(得分:1)
您不需要在ViewModel
上创建额外的对象。当您的View
由DataTemplate
DataType
定义时View
。它会自动传递给您的视图。
See this answer to understand DataContext
here
从DataContext
删除您的以下代码并检查local:AccountViewModel
,它将是<UserControl.DataContext>
<ObjectDataProvider ObjectType="local:AccountViewModel"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<ObjectDataProvider.ConstructorParameters>
<sys:DateTime></sys:DateTime>
<sys:DateTime></sys:DateTime>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
:
var mime = require('mime');
var fs = require('fs');
var path = require('path');
app.route('/api/xx/download').get(function (req, res) {
var file = __dirname + '/../../public/assets/data/demo.png';
var filename = path.basename(file);
var mimetype = mime.lookup(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
console.log('mimetype', mimetype);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
});