【发布时间】:2016-01-01 15:57:23
【问题描述】:
我有关注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 或其他方式,它可以工作。
当然,仅更新现有 FilledContentViewModel 中的所有内容将是一种解决方案。但我认为它很快就会变得一团糟,只需使用正确的上下文创建一个新的ViewModel 并切换它会更优雅。
有人知道让DataTemplate 的内容刷新的方法吗?
【问题讨论】:
-
您在
FilledMainWindow的Loaded事件中做某事?或者您正在使用想要刷新的一次性绑定? -
@Yeah69 是
FilledMainWindow数据绑定的,如果您将其DataContext从一个FilledContentViewModel更改为另一个,它会做出相应的反应? -
@Yeah69 当您将
Content更改为另一个FilledContentViewModel时,它将更改DataContext并重新评估ContentTemplate并再次将其设置为DataTemplate以用于FilledContentViewModel但对于 WPF 它是相同的模板因此不会发生更改,因此它不会重新创建用户控件,并且实际上只有其DataContext会更改。猜测问题出在此处。 -
@Brannon 我不使用
FilledMainWindow的Loaded事件,而且我也不在关注的项目中使用一次性绑定。 -
@dkozl 我不知道。还没试过。我会尝试直接更改
FilledMainWindow的DataContext(而不是通过DataTemplate)并告诉你结果。
标签: c# wpf xaml datatemplate contentcontrol