gpt4 book ai didi

wpf - 绑定(bind)时出现方法或操作未实现错误

转载 作者:行者123 更新时间:2023-12-02 14:30:43 24 4
gpt4 key购买 nike

我目前正在开发一个 Visual Studio 插件 (VSPackage),它最终应该能够可视化调用关系。为了代表他们,我想使用 Graph# library它管理图形(避免重叠边缘等)。不幸的是,我在运行时在 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”类型的约束。

也许它是问题的根源,但到目前为止我忽略了它,因为它编译了并且我做了与此相对应的tutorial .

奇怪的是,它实际上可以在使用 Graph# 提供的 DLL 的普通 WPF 应用程序中工作。当我离开图形属性时,错误不会显示,所以我猜它与图形属性有关。关于如何解决这个问题有任何提示吗?

提前非常感谢您!

最佳答案

我在 VSPackage 中使用 Graph# 时遇到了同样的问题。我通过不使用图形绑定(bind),而是通过在 CodeBehind 中分配 Graph 属性来解决这个问题。

这导致了分配 Graph 属性时无法加载 WPFExtensions 程序集的异常。我怀疑其原因是在 GraphSharp.Controls 中,在 XAML 中使用了程序集,但在编译时未添加引用,因为代码中没有引用。我可以通过在分配 Graph 属性之前添加以下行来解决此问题:

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

此行在 WPF 尝试根据 XAML 中的引用加载 WPFExtensions 库之前加载它。然后,图表就显示出来了。

关于wpf - 绑定(bind)时出现方法或操作未实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com