2011-05-16 16 views
5

Ecco il mio codice per la finestra:Grafico layout utilizzando Graph #

public partial class MainWindow 
{ 
    private MainWindowViewModel _mainWindowViewModel; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     _mainWindowViewModel = new MainWindowViewModel(); 
     DataContext = _mainWindowViewModel; 
    } 
} 

E il codice vista del modello:

class MainWindowViewModel : ViewModelBase 
{ 
    private BidirectionalGraph<string, IEdge<string>> _graph; 

    public BidirectionalGraph<string, IEdge<string>> Graph 
    { 
     get { return _graph; } 
     set 
     { 
      _graph = value; 
      NotifyPropertyChanged("Graph"); 
     } 
    } 

    public MainWindowViewModel() 
    { 
     Graph = new BidirectionalGraph<string, IEdge<string>>(); 

     // test data 
     const string vertex1 = "123"; 
     const string vertex2 = "456"; 
     const string vertex3 = "ddd"; 

     Graph.AddVertex(vertex1); 
     Graph.AddVertex(vertex2); 
     Graph.AddVertex(vertex3); 
     Graph.AddEdge(new Edge<string>(vertex1, vertex2)); 
     Graph.AddEdge(new Edge<string>(vertex2, vertex3)); 
     Graph.AddEdge(new Edge<string>(vertex2, vertex1)); 
    } 
} 

classe ViewModelBase:

class ViewModelBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void NotifyPropertyChanged(string info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 

E qui va il XAML:

<Controls:GraphLayout x:Name="graphLayout" Grid.Row="1" LayoutAlgorithmType="FR" OverlapRemovalAlgorithmType="FSA" HighlightAlgorithmType="Simple" Graph="{Binding Path=Graph}" /> 

Il problema è che non riesco a vedere nulla in questo layout. Forse lego i dati nel modo sbagliato? Graph # funziona correttamente con WPF4?

Aggiornamento: Ho aggiornato il mio codice, ma non vedo ancora nulla nel layout grafico.

Risolto: il layout grafico personalizzato deve essere aggiunto per visualizzare il grafico correttamente

public class CustomGraphLayout : GraphLayout<string, IEdge<string >, BidirectionalGraph<string, IEdge<string>>> {} 

risposta

2
public BidirectionalGraph<string, IEdge<string>> Graph { get; set; } 

non c'è INotifyPropertyChanged qui. Utilizzare questa invece

private BidirectionalGraph<string, IEdge<string>> _graph; 

public BidirectionalGraph<string, IEdge<string>> Graph 
{ 
    get { return _graph; } 
    set 
    { 
     _graph = value; 
     NotifyPropertyChanged("Graph"); 
    } 
} 

e assicurarsi di aver il supporto INotifyPropertyChanged implementazione boilerplate

public class MainWindowViewModel : INotifyPropertyChanged 

e

#region INotifyPropertyChanged Implementation 

public event PropertyChangedEventHandler PropertyChanged; 

private void NotifyPropertyChanged(String info) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(info)); 
    } 
} 

#endregion 
+0

Oh, grazie. Proverò ad usare 'INotifyPropertyChanged', ma posso usare' DependencyObject' e 'DependencyProperty' invece? Puoi darmi un esempio? Grazie in anticipo per la risposta. –

+0

È molto più tipico nella mia esperienza per i modelli di visualizzazione utilizzare INPC, ma ecco alcune discussioni sull'argomento http://stackoverflow.com/questions/291518/. Per quanto riguarda i campioni, il sito graphsharp ha alcuni http://graphsharp.codeplex.com/wikipage?title=Tutorials&referringTitle=Home – kenwarner

+0

Grazie per il tuo commento, ho aggiornato il mio codice, ma non ci sono ancora risultati. –

Problemi correlati