Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM绑定在设计时不起作用_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# MVVM绑定在设计时不起作用

C# MVVM绑定在设计时不起作用,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我尝试将几个按钮的可见性绑定到viewmodel中的一些布尔值,并使其在设计时工作。我这样做了好几次,从来没有遇到过问题,但现在它不起作用,我也不知道为什么。请注意,一切正常 当我运行应用程序时,一切正常 我将精华提取到一个单独的应用程序中,但它仍然不起作用 我的XAML: <Window x:Class="BindingTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta

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

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

我的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>
为了让它在真正的应用程序中工作,我在XAML的构造函数中添加了:

DataContext = new TestViewModel();
这一切都很简单,但为什么它在设计器中不起作用??过去我总是让它工作,现在我试了几个小时。。。这不是唯一一个不起作用的绑定,但为什么连这个都不起作用

预期结果:

  • 按钮1可见
  • 按钮2隐藏
  • 按钮3可见
在设计器中生成以下结果:

  • 按钮1倒塌
  • 按钮2可见
  • 按钮3可见

更新:设计时数据上下文绑定不起作用的问题是由于错误地将
d:
命名空间前缀用于IsDesignTimeCreatable属性

所以,改变

d:IsDesignTimeCreatable=True

一切都会好起来的。(我向MS提交的错误报告也将更新此信息。)


由于设计时DataContext绑定不起作用的问题在VS2015和VS2013中是一致可复制的,当IsDesignTimeCreatable以
d:
命名空间作为前缀时(请参见问题下方的注释),我决定向Microsoft提交一份错误报告:


让我们看看微软将如何跟进这个问题。应该解决这个问题,因为这样的问题会让开发人员措手不及,让他重新安装VisualStudio而毫无益处……;)

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

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

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

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


您的ViewModel不显示布尔值,而是显示可见性类型。@E-Bat,再看一次……我刚刚添加了可见性来测试是否至少有一些东西可以工作。但是,即使是可见性绑定也不能像预期的那样工作…@JCH2k,我刚刚用VS2015社区版进行了测试,我无法观察到这些问题。designtime数据上下文工作正常。嗯,尝试清理您的解决方案,重新启动VS,然后再次重建它。另外,请尝试禁用您可能使用的任何扩展…等等。。。不要使用名称空间
BindingTest
简直不敢相信!这真是荒谬!为什么两个名称空间中都有IsDesignTimeCreatable??非常感谢你的努力@JCH2k,在某些情况下需要使用类型化数据模板创建d:IsDesignTimeCreatable。我所期望的是XAML解析器不只是接受DesignInstance的d:IsDesignTimeCreatable,而只是默默地考虑IsDesignTimeCreatable的默认值(false)。相反,关于DesignInstance,我希望解析器要么强制正确使用IsDesignTimeCreatable,要么处理带有或不带有
d:
的属性。
d:IsDesignTimeCreatable=True
IsDesignTimeCreatable=True