用于数据绑定的 IntelliSense 不起作用
IntelliSense for Data Binding not working
在尝试调试由 Binding
扩展中的 属性 错误输入引起的数据绑定问题几个小时后。一旦我注意到错误,就会意识到如果 IntelliSense 可用,我可能一开始就没有犯错误。作为一个习惯于 error/warnings 输错名字的 Visual Studio 用户;也许我被宠坏了,但缺少 IntelliSense 导致了错误。
我做了一些研究,发现 Intellisense for Data Binding is available is Visual Studio 2013 which I'm using (Ultimate edition). I tried creating a simple WPF app following the second example in the blog. Firstly, There appears to be an error in the second example in the blog that resulted compiler error. Prefixing the Type=ViewModel:MainViewModel
attribute with d:
fixed the compiler error, yet the properties of my View-Model class are still not showing in the Intellisense menu. My code is below and in 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 设置重置为默认设置,以防万一。
此外,关于防止或检测绑定属性中输入错误的 属性 名称的其他方法有什么建议吗?
我在 Visual Studio 2013 年打开了您的 GitHub 项目,我得到了相同的行为;没有用于绑定的 IntelliSense。
设计数据是绑定解析失败的关键,所以我推荐这个:
- 将您的项目命名空间添加到您的 Window 元素:
xmlns:local="clr-namespace:IntelliSenseForDataBinding"
这可以帮助 解析 VM 的位置。
- 将您的
d:DataContext
更改为使用 local
命名空间而不是 d:Type
,本质上是提供您尝试使用的类型的位置:d:DataContext="{d:DesignInstance local:MainViewModel, IsDesignTimeCreatable=True}"
- 清理、构建和测试
证明:
我知道我来晚了,但是 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>
我希望这对以后的人有所帮助。
更新:
此问题已在最新版本 Visual Studio(v16.8 及更高版本)中得到解决。只是 upgrade to the latest version. 希望这个问题得到解决。
编辑:
visual studio 团队目前尚未针对此问题提供稳定的解决方案。据此ticket a fix is available in Visual Studio 16.8 Preview 3. For the meantime, you can consider other creative workarounds呈现。
如果此处的 none 个答案对您有用,解决此问题的一种可能方法是使用 Visual Studio Designer。
将您的插入符移至 XAML 元素。
单击“属性”选项卡(或直接按 F4)
转到 DataContext 属性。如果它看起来是空的,请尝试按 New
按钮。
如果您的设计器正常崩溃(就像我的一样),请尝试从那里进行更多调试。
在我的例子中,错误看起来是这样的:无法解析程序集 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 中的类型 'System.Runtime.CompilerServices.TupleElementNamesAttribute'。
这让我想到了这个 question and the installation of the System.Runtime nuget,以及其他一些更改。
一旦 Properties
选项卡能够正确识别您的 ViewModel
Intellisense 应该开始工作 属性。如果没有,请尝试重新启动 Visual Studio.
如果您使用的是 VS2019,请将 Visual Studio 更新到最新版本。
这将解决问题。
在尝试调试由 Binding
扩展中的 属性 错误输入引起的数据绑定问题几个小时后。一旦我注意到错误,就会意识到如果 IntelliSense 可用,我可能一开始就没有犯错误。作为一个习惯于 error/warnings 输错名字的 Visual Studio 用户;也许我被宠坏了,但缺少 IntelliSense 导致了错误。
我做了一些研究,发现 Intellisense for Data Binding is available is Visual Studio 2013 which I'm using (Ultimate edition). I tried creating a simple WPF app following the second example in the blog. Firstly, There appears to be an error in the second example in the blog that resulted compiler error. Prefixing the Type=ViewModel:MainViewModel
attribute with d:
fixed the compiler error, yet the properties of my View-Model class are still not showing in the Intellisense menu. My code is below and in 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 设置重置为默认设置,以防万一。
此外,关于防止或检测绑定属性中输入错误的 属性 名称的其他方法有什么建议吗?
我在 Visual Studio 2013 年打开了您的 GitHub 项目,我得到了相同的行为;没有用于绑定的 IntelliSense。
设计数据是绑定解析失败的关键,所以我推荐这个:
- 将您的项目命名空间添加到您的 Window 元素:
xmlns:local="clr-namespace:IntelliSenseForDataBinding"
这可以帮助 解析 VM 的位置。 - 将您的
d:DataContext
更改为使用local
命名空间而不是d:Type
,本质上是提供您尝试使用的类型的位置:d:DataContext="{d:DesignInstance local:MainViewModel, IsDesignTimeCreatable=True}"
- 清理、构建和测试
证明:
我知道我来晚了,但是 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>
我希望这对以后的人有所帮助。
更新: 此问题已在最新版本 Visual Studio(v16.8 及更高版本)中得到解决。只是 upgrade to the latest version. 希望这个问题得到解决。
编辑: visual studio 团队目前尚未针对此问题提供稳定的解决方案。据此ticket a fix is available in Visual Studio 16.8 Preview 3. For the meantime, you can consider other creative workarounds呈现。
如果此处的 none 个答案对您有用,解决此问题的一种可能方法是使用 Visual Studio Designer。
将您的插入符移至 XAML 元素。
单击“属性”选项卡(或直接按 F4)
转到 DataContext 属性。如果它看起来是空的,请尝试按
New
按钮。如果您的设计器正常崩溃(就像我的一样),请尝试从那里进行更多调试。
在我的例子中,错误看起来是这样的:无法解析程序集 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 中的类型 'System.Runtime.CompilerServices.TupleElementNamesAttribute'。
这让我想到了这个 question and the installation of the System.Runtime nuget,以及其他一些更改。
一旦 Properties
选项卡能够正确识别您的 ViewModel
Intellisense 应该开始工作 属性。如果没有,请尝试重新启动 Visual Studio.
如果您使用的是 VS2019,请将 Visual Studio 更新到最新版本。 这将解决问题。