Kir*_*kov 5 .net c# wpf graph graph-sharp
这是我的窗口代码:
public partial class MainWindow
{
private MainWindowViewModel _mainWindowViewModel;
public MainWindow()
{
InitializeComponent();
_mainWindowViewModel = new MainWindowViewModel();
DataContext = _mainWindowViewModel;
}
}
Run Code Online (Sandbox Code Playgroud)
和视图模型代码:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
ViewModelBase类:
class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是XAML:
<Controls:GraphLayout x:Name="graphLayout" Grid.Row="1" LayoutAlgorithmType="FR" OverlapRemovalAlgorithmType="FSA" HighlightAlgorithmType="Simple" Graph="{Binding Path=Graph}" />
Run Code Online (Sandbox Code Playgroud)
问题是我在这种布局中看不到任何东西.也许我以错误的方式绑定数据?Graph#与WPF4一起正常工作吗?
更新:我已经更新了我的代码,但我仍然没有在图表布局中看到任何内容.
已解决:应添加自定义图形布局以正确显示图形
public class CustomGraphLayout : GraphLayout<string, IEdge<string >, BidirectionalGraph<string, IEdge<string>>> {}
Run Code Online (Sandbox Code Playgroud)
public BidirectionalGraph<string, IEdge<string>> Graph { get; set; }
Run Code Online (Sandbox Code Playgroud)
这里没有INotifyPropertyChanged。用这个代替
private BidirectionalGraph<string, IEdge<string>> _graph;
public BidirectionalGraph<string, IEdge<string>> Graph
{
get { return _graph; }
set
{
_graph = value;
NotifyPropertyChanged("Graph");
}
}
Run Code Online (Sandbox Code Playgroud)
并确保您有支持的INotifyPropertyChanged实施样板
public class MainWindowViewModel : INotifyPropertyChanged
Run Code Online (Sandbox Code Playgroud)
和
#region INotifyPropertyChanged Implementation
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
Run Code Online (Sandbox Code Playgroud)