IntelliSense for Data Binding无法正常工作

时间:2015-04-01 15:03:13

标签: wpf data-binding visual-studio-2013 intellisense

尝试调试由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();
        }
    }
}

以下是无效的证据:

enter image description here

我希望在IntelliSense菜单中看到“Greeting”属性的项目。为什么它不存在的任何建议?我还尝试将Visual Studio设置重置为默认值,以防万一。

此外,有关在Binding属性中防止或检测输入错误的属性名称的其他方法的任何建议吗?

4 个答案:

答案 0 :(得分:32)

我在Visual Studio 2013中打开了你的GitHub项目,我得到了相同的行为;没有用于绑定的IntelliSense。

设计数据是失败的绑定解析的关键,所以我建议这样做:

  1. 将您的项目名称空间添加到您的Window元素:xmlns:local="clr-namespace:IntelliSenseForDataBinding",这可以帮助解析 VM的位置。
  2. 更改您的d:DataContext以使用local命名空间而不是d:Type,从根本上提供您尝试使用的类型的位置:d:DataContext="{d:DesignInstance local:MainViewModel, IsDesignTimeCreatable=True}"
  3. 清洁,构建和测试
  4. <强>证明: enter image description here

答案 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="&#xE12B;"
                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)

编辑: 视觉工作室团队目前尚未为该问题提供稳定的解决方案。根据此ticketVisual Studio 16.8 Preview 3中提供了一个修复程序。同时,您可以考虑将other creative workarounds存在。

如果这里没有答案对您有用,则解决此问题的一种可能方法是使用Visual Studio Designer。

  1. 将插入符插入XAML元素。

  2. 单击“属性”选项卡(或直接按F4键)

  3. 转到DataContext属性。如果它看起来是空的,请尝试按New按钮。 Property Tab with 'New' button

  4. 如果您的设计师正常崩溃(就像我的一样),请尝试从那里进行更多调试。

Designer Crash

在我的情况下,错误看起来像这样:无法解析程序集'mscorlib,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089'中的类型'System.Runtime.CompilerServices.TupleElementNamesAttribute'。

这促使我想到了questionSystem.Runtime nuget的安装以及其他一些更改。

一旦Properties标签能够正确识别您的ViewModel Intellisense应该开始工作。如果没有,请尝试重新启动Visual Studio。

答案 3 :(得分:1)

如果您使用的是 VS2019,请将 Visual Studio 更新到最新版本。 这将解决问题。