我使用MVVM并让我的MainWindow具有以下属性绑定:
<ContentControl x:Name="MainContentControl" Content="{Binding CurrentPage}" Margin="10,50,10,38"/>
单击按钮,我将CurrentPage设置为新的视图绑定,其上有一个ProgressCarControl:
private void HomeButtonClick(object obj)
{
CurrentPage = new HomeViewModel();
}
<ProgressBar Cursor="Hand"
Name="EffortProgressBar" Value="{Binding Home.Effort, Mode=TwoWay}" Foreground="{Binding RelativeSource={RelativeSource Mode=Self},
Path=Value, Converter={StaticResource ProgressForegroundConverter}}"
Height="12" Canvas.Left="30" Canvas.Top="75" Width="25" RenderTransformOrigin="0.5,0.5">
<ProgressBar.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="-1"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</ProgressBar.RenderTransform>
<ProgressBar.Triggers>
<EventTrigger RoutedEvent="ProgressBar.Loaded">
<BeginStoryboard>
<Storyboard >
<DoubleAnimation Storyboard.TargetProperty="Value" From="0" To="{Binding Home.Effort, Mode=TwoWay}" Duration="0:0:01"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ProgressBar.Triggers>
</ProgressBar>
当我单击主页按钮加载页面时,ProgressBar会正确设置动画,但当我再次单击该按钮时,ProgressBar不会设置动画。
是否有不同的事件要订阅才能实现此目的?或者这不可能吗?
答案 0 :(得分:1)
当您设置源属性DataTemplate
的{{1}}属性绑定到相同类型的新值时,Content
不会重新加载。
最简单的解决方法可能是通过在将ContentControl
属性设置为Content
的新实例之前将CurrentPage
属性设置为空来清除HomeViewModel
。为此,您需要返回调用者并让调度程序在重置CurrentPage
属性之前更新UI:
private async void HomeButtonClick(object obj)
{
if (CurrentPage != null && CurrentPage is HomeViewModel)
{
CurrentPage = null;
await Task.Delay(1);
}
CurrentPage = new HomeViewModel();
}
这会强制重新加载视图。