2015-04-01 15 views
10

Dopo un paio d'ore di tentativi di eseguire il debug di un problema con l'associazione dati causata da una proprietà digitata erroneamente in un'estensione Binding. Una volta ho notato l'errore, la consapevolezza che se IntelliSense fosse disponibile, potrei non aver commesso l'errore in primo luogo. Come utente di Visual Studio che è abituato a errori/avvisi durante l'errata digitazione di un nome; forse sono viziato, ma la mancanza di IntelliSense ha portato all'errore.IntelliSense per associazione dati non funzionante

Ho fatto qualche ricerca e ho trovato che Intellisense for Data Binding is available is Visual Studio 2013 che sto usando (edizione Ultimate). Ho provato a creare una semplice app WPF seguendo il secondo esempio nel blog. Innanzitutto, sembra che ci sia un errore nel secondo esempio nel blog che ha generato l'errore del compilatore. Prefixing the Type=ViewModel:MainViewModel attribute with d: corretto l'errore del compilatore, ma le proprietà della mia classe View-Model non vengono ancora visualizzate nel menu Intellisense. Il mio codice è sotto e 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(); 
     } 
    } 
} 

Ecco la prova che non funziona:

enter image description here

Mi aspetto di vedere un elemento per la proprietà 'Saluto' nel menu IntelliSense. Qualche suggerimento sul perché non è lì? Ho anche provato a reimpostare le impostazioni di Visual Studio di default, per ogni evenienza.

Inoltre, eventuali suggerimenti su metodi aggiuntivi per la prevenzione o il rilevamento di nomi di proprietà digitati in modo errato negli attributi di Associazione?

+0

Penso che questa potrebbe essere la risposta: http://stackoverflow.com/questions/24525414/intellisense-not-working-in-visual-studio-2013-for-xaml –

+0

No: ho appena checke d e ho installato Blend per Visual Studio. IntelliSense funziona per tutto il resto, solo per Data Binding. –

risposta

24

Ho aperto il progetto GitHub in Visual Studio 2013 e ho ottenuto lo stesso comportamento; nessun IntelliSense per le associazioni.

I dati di progettazione è la chiave per la risoluzione vincolante che sta fallendo, quindi vi consiglio questo:

  1. Aggiungi il tuo spazio dei nomi del progetto per il vostro elemento Window: xmlns:local="clr-namespace:IntelliSenseForDataBinding" che può aiutare risolvere la posizione della VM.
  2. Cambia la tua d:DataContext di utilizzare lo spazio dei nomi local invece di d:Type, fornendo essenzialmente la posizione del tipo che stai cercando di utilizzare: d:DataContext="{d:DesignInstance local:MainViewModel, IsDesignTimeCreatable=True}"
  3. Pulito, Build, e prova

Dimostrazione: enter image description here

+0

Questo ha fatto il trucco. Grazie! –

Problemi correlati