C# MVVM绑定在设计时不起作用
我尝试将几个按钮的可见性绑定到viewmodel中的一些布尔值,并使其在设计时工作。我这样做了好几次,从来没有遇到过问题,但现在它不起作用,我也不知道为什么。请注意,一切正常 当我运行应用程序时,一切正常 我将精华提取到一个单独的应用程序中,但它仍然不起作用 我的XAML: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
<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