Obecnie rozwijam wtyczkę Visual Studio (VSPackage), która powinna być w stanie wizualizować połączenia telefoniczne. Aby je reprezentować, chcę użyć modelu Graph# library, który zarządza wykresem (unikając nakładających się krawędzi itp.). Niestety pojawia się następujący komunikat o błędzie w czasie wykonywania w moim XAML:Metoda lub operacja nie zaimplementowana błąd w powiązaniu
Wyjątek XamlParseException: Metoda lub operacja nie jest zaimplementowana.
Błąd pojawia się na znaczniku <graph:CallRelationGraphLayout Graph="{Binding RelationGraph}"/>
.
<UserControl x:Class="Biocoder.InteractiveExploration.View.ExplorationControl"
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"
xmlns:graphsharp="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls"
xmlns:zoom="clr-namespace:WPFExtensions.Controls;assembly=WPFExtensions"
xmlns:graph="clr-namespace:Biocoder.InteractiveExploration.Graph"
xmlns:viewmodels="clr-namespace:Biocoder.InteractiveExploration.ViewModel"
xmlns:controls="clr-namespace:Biocoder.InteractiveExploration.Controls" mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.DataContext>
<viewmodels:ExplorationToolViewModel/>
</UserControl.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<zoom:ZoomControl Grid.Row="1"
Zoom="0.2"
ZoomBoxOpacity="0.5"
Background="Yellow">
<graph:CallRelationGraphLayout Graph="{Binding RelationGraph}"/>
</zoom:ZoomControl>
</Grid>
</UserControl>
Stworzyłem również własne klasy wierzchołków, krawędzi i wykresów. Mój wykres powinien ostatecznie reprezentować połączenia (krawędzie) między metodami (wierzchołkami).
MethodVertex.cs
public class MethodVertex
{
public string ID { get; private set; }
public bool IsMale { get; private set; }
public MethodVertex(string id, bool isMale)
{
ID = id;
IsMale = isMale;
}
public override string ToString()
{
return string.Format("{0}-{1}", ID, IsMale);
}
}
RelationEdge.cs
public class RelationEdge : Edge<MethodVertex>
{
public string Id { get; private set; }
public RelationEdge(string id, MethodVertex source, MethodVertex target)
: base(source, target)
{
Id = id;
}
}
CallRelationGraphLayout.cs
public class CallRelationGraphLayout : GraphLayout<MethodVertex, RelationEdge, CallRelationGraph>
{}
CallRelationGraph.cs
public class CallRelationGraph : BidirectionalGraph<MethodVertex, RelationEdge>
{
public CallRelationGraph()
{}
public CallRelationGraph(bool allowParallelEdges)
: base(allowParallelEdges)
{ }
public CallRelationGraph(bool allowParallelEdges, int vertexCapacity)
: base(allowParallelEdges, vertexCapacity)
{}
}
W ExplorationToolViewModel I ogłosił RelationGraph następująco:
private CallRelationGraph _relationGraph;
public CallRelationGraph RelationGraph
{
get { return _relationGraph; }
set
{
if (value != _relationGraph)
{
_relationGraph = value;
NotifyPropertyChanged("RelationGraph");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
Co może warto jeszcze wspomnieć, że mam następujący błąd wyświetlany czasami ale projekt kompiluje i uruchamia.
GenericArguments [1] 'Biocoder.InteractiveExploration.Graph.RelationEdge', 'na GraphSharp.Algorithms.Layout.ILayoutAlgorithm`3 [TVertex, TEdge, TGraph]' łamie wiązanie typu 'TEdge'.
Może to źródło problemu, ale zignorowałem go do tej pory, ponieważ został skompilowany i zrobiłem to odpowiadając temu tutorial.
Dziwne jest to, że faktycznie działa w normalnej aplikacji WPF przy użyciu bibliotek DLL dostarczonych przez Graph #. Kiedy opuszczam właściwość Graph, błąd nie pojawia się, więc myślę, że ma to związek z właściwością Graph. Wszelkie wskazówki, jak rozwiązać ten problem?
Dziękuję bardzo z góry!
Proszę również zamieścić deklarację właściwości 'RelationGraph' w' ExplorationToolViewModel'. – Clemens
@Clemens Dzięki! Właśnie dodałem żądaną deklarację. Wszystko powinno być w porządku moim zdaniem: S – Biocoder
A także zaksięguj deklarację klasy "CallRelationGraphLayout" – Palesz