0

我有一个 xaml 视图,其中包含我放入内容控件的动画。在 xaml 背后的代码中,我通过故事板查找资源加载动画。到目前为止这很好。我遇到的问题是在我的 xaml 中有一个按钮从视图模型触发中继命令,执行数据库调用然后提示消息。我想要实现的是当我点击按钮时,我想显示动画,然后当消息框显示时,我想隐藏动画。到目前为止还没有运气。

主视图

<ContentControl Name="loader" />

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
    <Button Content="Test" Command="{Binding TestCommand, Mode=OneWay}" />
</StackPanel> 

主视图.cs

public MainView()
{
    InitializeComponent();

    _loading = new LoadingUC();  
    _loaderUC = _loading;         
    showLoading.Content = _loaderUC;

    Storyboard showUC = FindResource("Test_Loading") as Storyboard;
    showUC.Begin(_loaderUC);    
}

测试视图模型

public ICommand TestCommand
{
    get
    {
        return _TestCommand ?? (_TestCommand = new RelayCommand(p => TestSave()));
    }
}

private void TestSave()
{
// show loading
    if (SaveSuccessFul() == true)
    {
        //hide loading
        MessageBox.Show("Save Completed");

    }
}
4

1 回答 1

0

您的 ViewModel 可以在显示消息框之前引发事件。

public event EventHandler LoadSuccessful;

private void TestSave()
{
// show loading
    if (SaveSuccessFul() == true)
    {
        //hide loading
        if (LoadSuccessful != null)
           LoadSuccessful(this, EventArgs.Empty);
        MessageBox.Show("Save Completed");

    }
}

视图可以注册到该事件并在收到事件时停止动画。

public MainView()
{
    InitializeComponent();

    _loading = new LoadingUC();  
    _loaderUC = _loading;         
    showLoading.Content = _loaderUC;

    Storyboard showNewPatUC = FindResource("Test_Loading") as Storyboard;
    showNewPatUC.Begin(_loaderUC);  
}

void OnLoadSuccessful(object sender, EventArgs args)
{
    Storyboard showNewPatUC = FindResource("Test_Loading") as Storyboard;
    showNewPathUC.Stop();
}
于 2012-09-27T17:19:08.917 回答