Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF ProgressBar加载的事件仅触发一次_C#_Wpf_Mvvm - Fatal编程技术网

C# WPF ProgressBar加载的事件仅触发一次

C# WPF ProgressBar加载的事件仅触发一次,c#,wpf,mvvm,C#,Wpf,Mvvm,我使用的是MVVM,我的主窗口具有以下属性绑定: <ContentControl x:Name="MainContentControl" Content="{Binding CurrentPage}" Margin="10,50,10,38"/> 单击按钮后,我将CurrentPage设置为新视图绑定,该绑定上有ProgressCar控件: private void HomeButtonClick(object obj) { CurrentP

我使用的是MVVM,我的主窗口具有以下属性绑定:

<ContentControl x:Name="MainContentControl" Content="{Binding CurrentPage}" Margin="10,50,10,38"/>
单击按钮后,我将CurrentPage设置为新视图绑定,该绑定上有ProgressCar控件:

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>
当我单击Home按钮加载页面时,ProgressBar会正确设置动画,但当我再次单击该按钮时,ProgressBar不会设置动画

是否有其他活动可供订阅以实现此目的?或者这是不可能的?

当您将ContentControl的Content属性绑定到同一类型的新值时,不会重新加载数据模板

最简单的解决方法可能是在将CurrentPage属性设置回HomeViewModel的新实例之前,通过将其设置为null来清除内容。要使其正常工作,您需要返回调用者并让调度程序在重置CurrentPage属性之前更新UI:

private async void HomeButtonClick(object obj)
{
    if (CurrentPage != null && CurrentPage is HomeViewModel)
    {
        CurrentPage = null;
        await Task.Delay(1);
    }
    CurrentPage = new HomeViewModel();
}

这将强制重新加载视图。

由于视图已加载,因此未设置动画。尝试用任何其他事件替换为什么不在按钮单击事件上触发动画?那毕竟是你真正想要的,不是吗?你的问题不是很清楚。它缺少详细信息,这些信息可以帮助我们了解您尝试过的内容以及您遇到的具体问题。@PeterDuniho我无法通过单击按钮来执行此操作,因为我无法访问ViewModel上的控件。视图模型与此有何关系?只需将事件触发器放在XAML中。如果您仍然需要帮助,请解决您的问题。提供一个好的例子,并准确地解释你需要什么。请参阅,尤其是该页底部链接的文章。