我在 ViewModel 中有一个ObservableCollection<INode>
,其中INode
是一个接口。
查看XAML 就像:
<Windows x:Class="XXX.Window1"
xmlns:vw="clr-namespace:XXX.Views"
xmlns:vm="clr-namespace:XXX.ViewModels"
xmlns:n="clr-namespace:XXX.Models.Nodes"
... />
...
<vm:MyView>
<vw:MyView.DataContext>
<vm:MyViewModel>
<vm:ComponentViewModel.Nodes>
<n:MyNode /> <--- PROBLEM HERE
<n:MyNode />
</vm:ComponentViewModel.Nodes>
</vm:MyViewModel>
</vw:MyView.DataContext>
</vm:MyView>
...
现在这可以在运行时工作,但不能在设计时间窗口中显示: 无法创建“MyNode”类型的实例
知道如何解决这个问题吗?
interface INode
{
string Name { get; set; }
string Status { get; }
}
abstract class Node : INode
{
public string Name { get; set; }
public abstract string Status { get; }
public override int GetHashCode()
{
unchecked
{
return Name.GetHashCode(); // <--- PROBLEM WAS HERE, Name = null
}
}
}
class MyNode : Node
{
public override NodeStatus Status { get { return "test"; } }
}
答案 0 :(得分:0)
每个案例似乎都是独一无二的。这是我在解决它之后学到的:不仅构造函数中的异常可以生成该错误消息。如果某些系统方法如GetHashCode()
抛出和异常,它将显示相同的消息(有时在设计时仅)。
其他人可能有更多提示或更多洞察VS设计时流程。
答案 1 :(得分:0)
据我所知,它不是XAML问题,但是因为你没有设置Name属性。当调用GetHashCode时,它将失败,因为您在空引用上调用方法。
尝试将您的节点添加为
<n:MyNode Name="blah" />