UserControl 的 C# 设计时 DataContext

Tim*_*imo 5 c# wpf xaml user-controls design-time

我正在尝试在 UserControl 中使用设计时 DataContext。根据这篇文章(以及本网站上的一些帖子),应该可以在 UserControl 标记本身中使用设计时 DataContext。

但是它对我不起作用,无论是在 UserControl 的还是在根元素的标签中。

UserControl(和模型视图模型)非常简单。一堆原始类型绑定到一些文本块和滑块。

我的用户控件看起来像:

<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}" />
    ...
Run Code Online (Sandbox Code Playgroud)

模型视图模型如下所示:

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"));
}
Run Code Online (Sandbox Code Playgroud)

如果我将d:DataContextUserControl放在UserControl 标记中,设计器中的 UserControl 不会更新绑定,但如果我将其放在 GroupBox(根元素)标记中,它会更新绑定。

但是它不使用我放在模型类中的值,而是插入了该类中每个属性的默认值。

我该怎么做才能让模型类的值进入我的视图?

编辑

我正在使用 .net 4.6

更新

看起来代码是有效的。我创建了一个新项目并添加了控件的精确副本,它运行得非常完美。然而,它在实际项目中仍然不起作用。

我试过的:

  • 删除 .suo 文件
  • 删除设计师影子缓存
  • 清理和重建
  • 重启