尝试调试由Binding
扩展名中的错误属性引起的数据绑定问题几个小时后。一旦我注意到这个错误,就会意识到如果IntelliSense可用,我可能一开始就没有犯过错误。作为Visual Studio用户,用于在输入错误名称时出错/警告;也许我被宠坏了,但缺乏IntelliSense导致错误。
我做了一些研究,发现我正在使用Intellisense for Data Binding is available is Visual Studio 2013(终极版)。我尝试按照博客中的第二个示例创建一个简单的WPF应用程序。首先,博客中的第二个示例中出现了导致编译器错误的错误。 Prefixing the Type=ViewModel:MainViewModel
attribute with d:
修复了编译器错误,但我的View-Model类的属性仍未显示在Intellisense菜单中。我的代码位于GitHub下方。
MainViewModel.cs:
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace IntelliSenseForDataBinding
{
public class MainViewModel : INotifyPropertyChanged
{
public MainViewModel()
{
Greeting = "Hello World";
Answer = 42;
}
private string _Greeting;
public string Greeting
{
get { return _Greeting; }
set { _Greeting = value; OnPropertyChanged(); }
}
private int _Answer;
public int Answer
{
get { return _Answer; }
set { _Answer = value; OnPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
MainWindow.xaml:
<Window x:Class="IntelliSenseForDataBinding.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"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="450"
d:DataContext="{d:DesignInstance Type=MainViewModel, IsDesignTimeCreatable=True}"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>
MainWindows.xaml.cs:
using System.Windows;
namespace IntelliSenseForDataBinding
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
DataContext = new MainViewModel();
InitializeComponent();
}
}
}
以下是无效的证据:
我希望在IntelliSense菜单中看到“Greeting”属性的项目。为什么它不存在的任何建议?我还尝试将Visual Studio设置重置为默认值,以防万一。
此外,有关在Binding属性中防止或检测输入错误的属性名称的其他方法的任何建议吗?
答案 0 :(得分:32)
我在Visual Studio 2013中打开了你的GitHub项目,我得到了相同的行为;没有用于绑定的IntelliSense。
设计数据是失败的绑定解析的关键,所以我建议这样做:
xmlns:local="clr-namespace:IntelliSenseForDataBinding"
,这可以帮助解析 VM的位置。d:DataContext
以使用local
命名空间而不是d:Type
,从根本上提供您尝试使用的类型的位置:d:DataContext="{d:DesignInstance local:MainViewModel, IsDesignTimeCreatable=True}"
<强>证明:强>
答案 1 :(得分:3)
我知道我来晚了,但是Kcvin的回答确实对我有很大帮助,我想补充一点,有些类也可以使用DataType
来帮助IntelliSense发挥作用。
示例:
<DataTemplate x:Key="ItemTemplate" DataType="entities:Item">
<Grid Height="60">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Text=""
Style="{StaticResource MediumIconStyle}"
Margin="{StaticResource XSmallLeftMargin}"
AutomationProperties.Name="List item icon" />
<StackPanel
Grid.Column="1"
Margin="{StaticResource SmallLeftMargin}"
VerticalAlignment="Center">
<TextBlock Style="{StaticResource ListTitleStyle}" Text="{Binding Name}" />
<TextBlock Style="{StaticResource ListSubTitleStyle}" Text="{Binding Description}" />
</StackPanel>
</Grid>
</DataTemplate>
我希望这对以后的人有所帮助。
答案 2 :(得分:1)
编辑: 视觉工作室团队目前尚未为该问题提供稳定的解决方案。根据此ticket,Visual Studio 16.8 Preview 3中提供了一个修复程序。同时,您可以考虑将other creative workarounds存在。
如果这里没有答案对您有用,则解决此问题的一种可能方法是使用Visual Studio Designer。
将插入符插入XAML元素。
单击“属性”选项卡(或直接按F4键)
如果您的设计师正常崩溃(就像我的一样),请尝试从那里进行更多调试。
在我的情况下,错误看起来像这样:无法解析程序集'mscorlib,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089'中的类型'System.Runtime.CompilerServices.TupleElementNamesAttribute'。
这促使我想到了question和System.Runtime nuget的安装以及其他一些更改。
一旦Properties
标签能够正确识别您的ViewModel
Intellisense应该开始工作。如果没有,请尝试重新启动Visual Studio。
答案 3 :(得分:1)
如果您使用的是 VS2019,请将 Visual Studio 更新到最新版本。 这将解决问题。