MVVM绑定在设计时不起作用

时间:2015-08-10 15:55:50

标签: c# wpf xaml mvvm

我尝试将几个按钮的可见性绑定到视图模型中的某些布尔值,并使其在设计时工作。我这样做了几次,从来没有遇到过问题,但现在它不起作用,我也不知道为什么。请注意,一切正常 我运行应用程序时很好。

我将精华提取到一个单独的应用程序中,它仍然不起作用!

我的XAML:

<Window x:Class="BindingTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:bindingTest="clr-namespace:BindingTest"
        Title="MainWindow" Height="350" Width="525"
        mc:Ignorable="d"
        d:DataContext="{d:DesignInstance bindingTest:TestViewModel, d:IsDesignTimeCreatable=true}">
    <Grid>
        <Grid.Resources>
            <BooleanToVisibilityConverter x:Key="BoolToVis"/>
        </Grid.Resources>
        <StackPanel>
            <Button Visibility="{Binding IsButton1Visible, Converter={StaticResource BoolToVis}}">Hallo 1</Button>
            <Button Visibility="{Binding Button2Visibility}">Hallo 2</Button>
            <Button>Hallo 3</Button>
        </StackPanel>
    </Grid>
</Window>

我的ViewModel:

public class TestViewModel
{
    public bool IsButton1Visible
    {
        get { return true; }
    }

    public Visibility Button2Visibility
    {
        get { return Visibility.Hidden; }
    }
}

为了使它在真实的应用程序中工作,我添加到XAML的构造函数中:

DataContext = new TestViewModel();

这一切都很简单,但为什么它不适用于设计师?我总是让它在过去工作,现在我试了好几个小时......这不是唯一没有工作的绑定,但为什么连工作都没有?

预期结果:

  • Button1可见
  • Button2隐藏
  • Button3可见

设计师的结果:

  • Button1已崩溃
  • Button2可见
  • Button3可见

2 个答案:

答案 0 :(得分:4)

更新:设计时DataContext绑定无法正常工作的问题是由于错误地使用 IsDesignTimeCreatable 属性的d:命名空间前缀。

所以,改变

d:IsDesignTimeCreatable=True

IsDesignTimeCreatable=True

一切都应该没问题。 (我向MS提交的错误报告也将使用此信息进行更新。)

IsDesignTimeCreatable d:命名空间为前缀时,VS2015以及VS2013中设计时DataContext绑定无效的问题始终可重现(请参阅问题下方的注释) ,我决定向微软提交一份错误报告:Issue #1651633 "WPF designer: Designtime DataContext bindings broken?"

让我们看看微软将如何跟进这个问题。应该解决这个问题,因为这样的问题会让开发人员措手不及,并让他重新安装Visual Studio而不会有任何好处......;)

答案 1 :(得分:2)

如果代码正常,则可能还有另一个棘手的问题:

Visual Studio的 Designer 中,在2019年引入了新按钮,该按钮启用/禁用设计数据预览

>

这是设计器窗口左侧botton上的一个非常小的按钮。它的工具提示是“启用项目代码”。

单击此重要的切换按钮以查看设计数据。 (但是请注意,如果已经启用,则不要禁用它。)

Button to enable designer data