C# WPF命名空间报错:MainViewModel及转换器无法识别
刚处理过类似的XAML设计时错误,给你几个具体的排查步骤,应该能搞定:
检查命名空间匹配度:
先确认你的MainViewModel和SelectedItemToContentConverter实际所在的命名空间。比如如果MainViewModel在Hermes.ViewModel子命名空间下,那XAML里的xmlns:local应该指向这个子空间,而不是根Hermes。比如要写成:xmlns:local="clr-namespace:Hermes.ViewModel"而不是只写
clr-namespace:Hermes,否则XAML找不到嵌套子空间里的类。确保类是public修饰的:
很多时候这个错误是因为类的访问级别不够。如果你的MainViewModel或者转换器是internal的,Blend的设计实例(d:DesignInstance)在设计时无法访问到这些类,就会报“不存在”的错误。把这两个类的修饰符改成public再试试。先编译整个解决方案:
XAML的智能感知经常会滞后,尤其是刚添加完类或者修改了命名空间之后。先Build一下你的项目,很多时候编译完成后,这些“找不到”的错误会自动消失。调整
d:DesignInstance的参数:
如果你的MainViewModel没有无参构造函数,设计时实例化会失败,也会触发这个错误。可以给d:DesignInstance加上IsDesignTimeCreatable="True"(前提是类有public无参构造),或者设为False让设计器只识别类型而不实例化:d:DataContext = "{d:DesignInstance local:MainViewModel, IsDesignTimeCreatable=False}"排查转换器的实现:
针对SelectedItemToContentConverter,还要确认它是否正确继承了IValueConverter接口,并且实现了Convert和ConvertBack方法。如果接口没实现或者方法缺失,也可能导致设计器识别不到这个类。
内容的提问来源于stack exchange,提问作者Danki




