小编Wil*_*ull的帖子

在MVVM应用程序中切换ViewModel时出现BindingExpression路径错误

首先,一些背景.如果您熟悉该问题,请跳至该BindingExpression部分.这是我在WPF中的第一个主要项目,所以我对MVVM模式还很陌生.是我发现的唯一一个类似的问题,其黯淡的回答并没有让我感到非常兴奋.

我/我正在构建一个.NET 3.5 WPF应用程序,我正在使用MVVM(自己实现,没有框架).在此,我有一些ViewsViewModels.这些驻留在主内ApplicationViewApplicationViewModel分别.

我改变视图的方式是通过使用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 …

c# wpf mvvm .net-3.5

7
推荐指数
1
解决办法
1786
查看次数

Spring 4不会自动限定autowire上的泛型类型

问题已被识别,更新后(滚动到底部)

我正在开发一个桌面应用程序,目前使用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)

然后,我有两个具体的实现,ChunkRepositoryImplProjectRepositoryImpl相应地参数化.它们从抽象类中共享一些常见的实现,但声明如下:

@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.我的情况和 …

java generics spring dependency-injection spring-4

1
推荐指数
1
解决办法
2282
查看次数

标签 统计

.net-3.5 ×1

c# ×1

dependency-injection ×1

generics ×1

java ×1

mvvm ×1

spring ×1

spring-4 ×1

wpf ×1