我试图在UserControl中使用设计时DataContext。根据{{3}}(以及本网站上的一些帖子),应该可以在UserControl标记本身中使用设计时DataContext。
然而,它既不适用于我,也不适用于UserControl,也不适用于根元素标记。
UserControl(和模型视图模型)非常简单。一堆原始类型绑定到某些文本块和滑块。
我的UserControl看起来像:
var mongoose = require('mongoose');
var App = mongoose.model('App');
var express = require('express');
var bodyParser = require('body-parser');
var exp = express();
exp.use(bodyParser.json());
exp.use(bodyParser.urlencoded({
extended: true
}));
module.exports.searchApp = function(req, res) {
App.findOne({
'app_name': req.body.search
}).exec(function(err, app) {
res.status(200);
res.json(app);
});
};
并且模型视图模型如下所示:
<UserControl mc:Ignorable="d"
d:DataContext="{d:DesignInstance mockups:PrototypeMockup}">
<GroupBox DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Path=Prototype}" Header="{Binding Name}" >
...
<Image Source="{Binding Image}" />
<TextBlock Text="{Binding Size, StringFormat={}{0} mm}" />
<Slider Minimum="10" Maximum="80" Value="{Binding Size}" IsEnabled="{Binding IsEditing}" />
<TextBlock Text="{Binding Threshold}" />
<Slider Minimum="0" Maximum="255" Value="{Binding Threshold}" IsEnabled="{Binding IsEditing}" />
<TextBlock Text="{Binding BlockSize, StringFormat={}{0} px}" />
<Slider Minimum="10" Maximum="200" Value="{Binding BlockSize}" IsEnabled="{Binding IsEditing}" />
...
如果我将public class PrototypeMockup
{
public string Name => "Mockup Template";
public int Threshold => 230;
public int Size => 50;
public int BlockSize => 120;
public bool Ignore => false;
public bool IsEditing => true;
public Int32Point ImageCenter => new Int32Point(400, 200);
public BitmapSource Image => new BitmapImage(new Uri("image.png"));
}
放在UserControl标记中,设计器中的UserControl不会更新绑定,但如果我将它放在GroupBox(根元素)标记中,它会更新绑定。
但是它不使用我放在模型类中的值,而是在该类中添加了每个属性的默认值。
我需要做些什么才能将模型类的值放入我的视图中?
修改
我正在使用.net 4.6
更新
似乎代码有效。我已经创建了一个新项目并添加了控件的精确副本,它的工作原理非常完美。然而,它仍然不适用于真实的项目。
我尝试过的事情: