首先,一些背景.如果您熟悉该问题,请跳至该BindingExpression
部分.这是我在WPF中的第一个主要项目,所以我对MVVM模式还很陌生.这是我发现的唯一一个类似的问题,其黯淡的回答并没有让我感到非常兴奋.
我/我正在构建一个.NET 3.5 WPF应用程序,我正在使用MVVM(自己实现,没有框架).在此,我有一些Views
和ViewModels
.这些驻留在主内ApplicationView
和ApplicationViewModel
分别.
我改变视图的方式是通过使用XAML DataTemplate元素ApplicationView
,如下所示:
<DataTemplate DataType="{x:Type viewmodels:InitViewModel}">
<views:InitView />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
然后在主体中我有一个ContentControl,它绑定到一个属性 ApplicationViewModel
<ContentControl Content="{Binding CurrentPageViewModel}"/>
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,所有这些似乎工作正常,并完全符合预期.但是,当我在运行后查看Debug输出时,会出现很多BindingExpression
错误.
这是一个例子.我有一个属性SplashText
,在我的InitViewModel
.这绑定到初始屏幕(InitView
)中的文本块.当启动画面结束并切换视图模型时,我得到以下内容:
System.Windows.Data Error: 39 : BindingExpression path error: 'SplashText' property not found on 'object' ''MainMenuViewModel' (HashCode=680171)'. BindingExpression:Path=SplashText; DataItem='MainMenuViewModel' (HashCode=680171); target element is 'TextBox' (Name='FeedBackBox'); target property is 'Text' (type 'String')
我知道这是因为绑定仍然存在,但DataContext的CurrentPageViewModel属性已更改.所以我想知道的是:
在此先感谢,并为整体问题道歉.
编辑03/09/13 - 感谢Jehof,Francesco De …
问题已被识别,更新后(滚动到底部)
我正在开发一个桌面应用程序,目前使用Spring(spring-context
,4.1.6.RELEASE
)进行IoC和依赖注入.我正在使用注释配置@ComponentScan
.我遇到的问题应该作为一个功能实现4.X.X
,因为它在这里和这里说明,但我得到了旧的3.X.X
例外.
我有一个参数化的接口,代表一个通用的存储库:
public interface DomainRepository<T> {
T add(T entity) throws ServiceException, IllegalArgumentException;
// ...etc
}
Run Code Online (Sandbox Code Playgroud)
然后,我有两个具体的实现,ChunkRepositoryImpl
并ProjectRepositoryImpl
相应地参数化.它们从抽象类中共享一些常见的实现,但声明如下:
@Repository
public class ChunkRepositoryImpl extends AbstractRepositoryImpl<Chunk> implements DomainRepository<Chunk> {
// ...+ various method implementations
}
@Repository
public class ProjectRepositoryImpl extends AbstractRepositoryImpl<Project> implements DomainRepository<Project> {
// ...+ various method implementations
}
Run Code Online (Sandbox Code Playgroud)
我对上述链接的理解使我相信我应该能够自动装配这些链接,而无需通过手动指定bean @Qualifier
.但是,当我这样做时:
@Autowired
private DomainRepository<Project> repository;
Run Code Online (Sandbox Code Playgroud)
我得到以下异常(当然是前面有一个很长的堆栈跟踪):
引起:org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有定义[com.foo.bar.repositories.DomainRepository]类型的限定bean:期望的单个匹配bean但找到2:chunkRepositoryImpl,projectRepositoryImpl
任何人都可以阐明为什么会发生这种情况?我希望这个例外3.X.X
,但不应该发生4.X.X
.我的情况和 …