Метод или операция не реализована ошибка при связывании

В настоящее время я разрабатываю плагин для Visual Studio (VSPackage), который наконец должен иметь возможность визуализировать отношения вызовов. Чтобы представлять их, я хочу использоватьГраф # библиотека который управляет графиком (избегая перекрывающихся ребер и т. д.). К сожалению, я получаю следующее сообщение об ошибке во время выполнения в моем XAML:

XamlParseException: метод или операция не реализованы.

Ошибка выскакивает на<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>

Я также создал собственные классы вершин, ребер и графа. Мой граф должен, наконец, представлять отношения вызова (ребра) между методами (вершинами).

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

вExplorationToolViewModel Я объявил RelationGraph следующим образом:

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

Возможно, я также должен упомянуть, что иногда отображается следующая ошибка, но проект компилируется и запускается.

GenericArguments [1], «Biocoder.InteractiveExploration.Graph.RelationEdge», в «GraphSharp.Algorithms.Layout.ILayoutAlgorithm`3 [TVertex, TEdge, TGraph]» нарушает ограничение типа «TEdge».

Может быть, это источник проблемы, но я проигнорировал это до сих пор, так как это скомпилировано, и я сделал это в соответствии с этимруководство.

Странно то, что на самом деле он работает в обычном приложении WPF, используя библиотеки DLL, предоставляемые Graph #. Когда я опускаю свойство Graph, ошибка не появляется, поэтому я предполагаю, что это связано со свойством Graph. Любые советы о том, как решить эту проблему?

Заранее большое спасибо!

 Clemens22 окт. 2012 г., 12:47
Пожалуйста, также опубликуйте декларациюRelationGraph недвижимость вExplorationToolViewModel.
 Biocoder01 нояб. 2012 г., 15:57
@Palesz Привет, ребята! Спасибо за вашу помощь, но у меня все еще есть проблема. Было бы неплохо, если бы вы могли дать мне несколько советов: -S Большое спасибо!
 Biocoder23 окт. 2012 г., 10:14
@Palesz Спасибо, Палеш! Я только что добавил свои классы вершин, ребер и макетов. В основном я сделал все, как показано вБлог Саша Бабер.
 Biocoder22 окт. 2012 г., 17:17
@Clemens Спасибо! Я просто добавил запрошенную декларацию. Все должно быть хорошо на мой взгляд: S
 Palesz22 окт. 2012 г., 17:42
А также опубликовать декларациюCallRelationGraphLayout класс

Ответы на вопрос(2)

Я смог преодолеть эту проблему, не используя привязки для графика, а назначивGraph недвижимость в CodeBehind.

Это привело к исключению, что сборка WPFExtensions не может быть загружена при назначенииGraph свойство. Я подозреваю, что причина этого в том, что в GraphSharp.Controls сборка используется в XAML, но ссылка не добавляется при компиляции, поскольку в коде нет ссылок. Мне удалось это исправить, добавив следующую строку перед назначениемGraph свойство:

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

Эта строка загружает библиотеку WPFExtensions, прежде чем WPF попытается загрузить ее на основе ссылки в XAML. После этого был показан график.

 klugerama21 апр. 2015 г., 22:03
Это сработало для меня! Просто добавивSystem.Reflection.Assembly.Load("RequiredLibrary, Version={VersionNumber}, Culture=neutral, PublicKeyToken=null"); в конструкторе страницы XAML передInitializeComponent(); линия сделала свое дело. Спасибо!

потому что для параметра local было установлено значение false. Установка копии локального в истинное решило это. (Сборка A зависела от сборки B, у которой не было локального флага копирования.)

Ваш ответ на вопрос