2015-04-01 14 views
10

Nach ein paar Stunden versucht, ein Problem mit Datenbindung zu beheben, die durch eine falsch eingegebene Eigenschaft in einer Binding Erweiterung verursacht wurde. Sobald ich den Fehler bemerkte, erkannte ich, dass ich, wenn IntelliSense verfügbar war, den Fehler vielleicht nicht gemacht hatte. Als Visual Studio-Benutzer, der an Fehler/Warnungen gewöhnt ist, wenn er einen Namen falsch definiert; vielleicht bin ich verwöhnt, aber das Fehlen von IntelliSense führte zu dem Fehler.IntelliSense für Datenbindung funktioniert nicht

Ich habe etwas Forschung und ich fand, dass Intellisense for Data Binding is available is Visual Studio 2013 die ich benutze (Ultimate Edition). Ich habe versucht, eine einfache WPF-App nach dem zweiten Beispiel im Blog zu erstellen. Erstens: Im zweiten Beispiel im Blog scheint ein Fehler aufgetreten zu sein, der zu einem Compilerfehler geführt hat. Prefixing the Type=ViewModel:MainViewModel attribute with d: hat den Compiler-Fehler behoben, aber die Eigenschaften meiner View-Model-Klasse werden immer noch nicht im Intellisense-Menü angezeigt. Mein Code ist unter und 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(); 
     } 
    } 
} 

Hier ist der Beweis dafür, dass nicht funktioniert:

enter image description here

Ich würde erwarten, ein Element für die 'Gruß' Eigenschaft im IntelliSense-Menü zu sehen. Irgendwelche Vorschläge, warum es nicht da ist? Ich habe auch versucht, die Visual Studio-Einstellungen auf die Standardeinstellung zurückzusetzen, nur für den Fall.

Darüber hinaus Vorschläge zu zusätzlichen Methoden zum Verhindern oder Erkennen von falsch geschriebenen Eigenschaftsnamen in Binding-Attribute?

+0

Ich denke, das ist vielleicht die Antwort: http://StackOverflow.com/Questions/24525414/intellisense-not-working-in-visual-studio-2013-for-Xaml –

+0

Nein, ich habe nur checkee d und ich habe Blend für Visual Studio installiert. IntelliSense arbeitet für alles andere, nur für Datenbindung. –

Antwort

24

Ich öffnete Ihr GitHub-Projekt in Visual Studio 2013 und ich habe das gleiche Verhalten; Kein IntelliSense für Bindungen.

Die Konstruktionsdaten sind der Schlüssel für die Bindung Auflösung, die versagt, so empfehle ich folgende:

  1. Fügen Sie Ihren Projekt-Namespace zu Ihrem Fensterelement: xmlns:local="clr-namespace:IntelliSenseForDataBinding" der resolve die Lage des VM helfen kann.
  2. Ihre d:DataContext Ändern Sie den local Namespace statt d:Type zu verwenden, im Wesentlichen die Position der Art zu schaffen, die Sie zu verwenden sind versuchen: d:DataContext="{d:DesignInstance local:MainViewModel, IsDesignTimeCreatable=True}"
  3. Sauber, Bauen und Test

Beweis: enter image description here

+0

Das hat den Trick gemacht. Vielen Dank! –

Verwandte Themen