0

コンテンツ コントロールに入れたアニメーションを含む xaml ビューがあります。xaml のコード ビハインドでは、ストーリーボード検索リソースを介してアニメーションを読み込みます。ここまでは問題ありません。私が問題を抱えているのは、xaml に、ビュー モデルからリレー コマンドをトリガーし、データベース呼び出しを実行してメッセージを表示するボタンがあることです。私が達成したいのは、ボタンをクリックしたときにアニメーションを表示し、メッセージ ボックスが表示されたときにアニメーションを非表示にしたいということです。これまでのところ運がありません。

メインビュー

<ContentControl Name="loader" />

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

MainView.cs

public MainView()
{
    InitializeComponent();

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

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

TestViewModel

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 に答える