2011-05-16 4 views
5

を使用すると、ウィンドウのための私のコードです:グラフレイアウトここでは、グラフ#

public partial class MainWindow 
{ 
    private MainWindowViewModel _mainWindowViewModel; 

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

とビューモデルコード:

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)); 
    } 
} 

ViewModelBaseクラス:

class ViewModelBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

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

そして、ここが行きますXAML:

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

問題は、私はこのレイアウトのものを見ることができないということです。たぶん私は間違った方法でデータをバインドする? WPF4ではGraph#が正しく動作しますか?

更新:コードを更新しましたが、グラフレイアウトで何も表示されません。

を解決:カスタムグラフのレイアウトは、ここにはINotifyPropertyChangedはありません正しく

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

答えて

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

グラフ表示するために追加する必要があります。この代わりに

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

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

を使用して、INotifyPropertyChanged実装の決まり文句に

public class MainWindowViewModel : INotifyPropertyChanged 

#region INotifyPropertyChanged Implementation 

public event PropertyChangedEventHandler PropertyChanged; 

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

#endregion 
+0

ああ、感謝をサポートしていることを確認してください。 'InotifyPropertyChanged'を使うつもりですが、代わりに' DependencyObject'と 'DependencyProperty'を使うことができますか?あなたは私に例を挙げることができますか?あなたの答えに事前に感謝します。 –

+0

ビューモデルがINPCを使用するのは私の経験でははるかに一般的ですが、ここではテーマhttp://stackoverflow.com/questions/291518/に関する議論があります。サンプルを見る限り、グラフシャープサイトにはいくつかのhttp://graphsharp.codeplex.com/wikipage?title=Tutorials&referringTitle=Home – kenwarner

+0

コメントありがとうございます。コードを更新しましたが、まだ結果はありません。 –

関連する問題