切换到相同DataType的对象后,DataTemplate不刷新 [英] DataTemplate does not refresh after switching to an object of same DataType

查看:45
本文介绍了切换到相同DataType的对象后,DataTemplate不刷新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下 ControlTemplate :

<ContentControl Content="{Binding ContentViewModel}">
   <ContentControl.Resources>
      <DataTemplate DataType="{x:Type viewModel:FilledContentViewModel}">
         <usercontrols:FilledMainWindow x:Name="MainContent" />
      </DataTemplate>
      <DataTemplate DataType="{x:Type viewModel:EmptyContentViewModel}">
         <!-- todo: Something like a StartPage here -->
      </DataTemplate>
   </ContentControl.Resources>
</ContentControl>

这很好用,直到视图模型尝试将 ContentViewModel 属性从一个 FilledContentViewModel 更改为新的 FilledContentViewModel ,然后将其内容 ContentControl 不刷新.如果从 EmptyContentViewModel 切换到 FilledContentViewModel 或以其他方式进行切换,则可以正常工作.

This works great until the view model tries to change the ContentViewModel property from one FilledContentViewModel to a new FilledContentViewModel, then the content of the ContentControl does not refresh. If switching from EmptyContentViewModel to FilledContentViewModel or the other way around, it works.

当然,仅更新现有 FilledContentViewModel 中的所有内容都是一种解决方案.但是我认为这可能很快就会变得混乱,仅创建具有正确上下文的新 ViewModel 并进行切换会更加优雅.

Of course, just updating everything in the existing FilledContentViewModel instead would be one solution. But I think it could get messy quick and that just creating a new ViewModel with the right context and switch it would be more elegant.

有人知道一种让 DataTemplate 的内容刷新的方法吗?

Does anybody know a way to let the content of the DataTemplate refresh?

推荐答案

我遇到了与 ContentPresenter 控件类似的问题,在该控件中,我会将 Content 切换为具有相同视图模型类型的新实例,并且没有刷新.我发现在social.msdn.microsoft.com上遇到了几乎相同的问题,最终使用的解决方案是创建自定义的 ContentControl / ContentPresenter 作为social.msdn.microsoft.com答案的一部分:

I ran into a similar problem with the ContentPresenter control where I would switch the Content to be a new instance of the same view model type and it wasn't refreshing. I found nearly the identical problem I was running into on social.msdn.microsoft.com and the solution I ended up using was to create a custom ContentControl / ContentPresenter that was posted as part of the social.msdn.microsoft.com answer:

查看全文

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆