2012-10-22 15 views
7

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!

+0

Proszę również zamieścić deklarację właściwości 'RelationGraph' w' ExplorationToolViewModel'. – Clemens

+0

@Clemens Dzięki! Właśnie dodałem żądaną deklarację. Wszystko powinno być w porządku moim zdaniem: S – Biocoder

+0

A także zaksięguj deklarację klasy "CallRelationGraphLayout" – Palesz

Odpowiedz

1

Doświadczyłem tego samego problemu podczas korzystania z wykresu # w VSPackage. Byłem w stanie przezwyciężyć problem, nie używając Bindowania dla wykresu, ale przypisując właściwość Graph w CodeBehind.

Doprowadziło to do wyjątku, że nie można było załadować zespołu WPFExtensions podczas przypisywania właściwości Graph. Podejrzewam, że powodem jest to w GraphSharp.Kontrolki, zespół jest używany w XAML, ale odniesienie nie jest dodawane podczas kompilacji, ponieważ nie ma żadnych odniesień w kodzie. Udało mi się rozwiązać ten problem poprzez dodanie następującej linii przed przypisaniem właściwość Graph:

var a = System.Reflection.Assembly.Load("WPFExtensions, Version=1.0.3437.34043, Culture=neutral, PublicKeyToken=null"); 

Linia ta ładuje bibliotekę WPFExtensions przed WPF próbuje załadować go na podstawie odniesienia w XAML. Następnie pokazano wykres.

+0

To zadziałało dla mnie! Po prostu dodajemy "System.Reflection.Assembly.Load" (RequiredLibrary, Version = {VersionNumber}, Culture = neutral, PublicKeyToken = null "); w konstruktorze strony XAML przed linią' InitializeComponent(); ' sztuczka. Dziękuję Ci! – klugerama

0

W moim przypadku zestaw nie został skopiowany do folderu wyjściowego, ponieważ opcja copy local została ustawiona na wartość false. Ustawienie kopiowania lokalnego na true rozwiązało to. (Zespół A był zależny od złożenia B, które nie miało lokalnej flagi kopii).

Powiązane problemy