2012-02-19 15 views
0

私は、アニメーションが終了したときにわかる依存プロパティを探しています。私は、背景をアニメーション化する必要があることをビューに知らせるためにプロパティ "IsDirty"を設定することによって値が変更されたときにフラッシュを表示していますが、次の変更の値をリセットする必要があります。ViewModelでアニメーションが終了したときを知る方法?

私はあなたが何を意味するかを願っています。

EDIT:フラッシュを表示するために、ストーリーボードを使用しています。

+0

'プロパティを「値が変更されました」に設定することにより、イベントが発生した場合はイベントが発生し、「値が変更されました」はプロパティではありません。 –

+0

@ H.B:共通の基準である「IsDirty」または「IsValueDirty」と呼ばれるプロパティを使用すると、より快適になりますか? –

+0

それは実際にそのように使用されるならば、それは全く異なる(そして受け入れられる)ことになります。しかしあなたの説明はそれほどよく聞こえませんが、適切な* IsDirty *はアニメーションの仕上げによってクリアされません。 –

答えて

1

StoryBoardの場合はCompleted eventを処理し、その時点で通知を設定できます。私はあなたがコードの背後にあることを避けたいと思っていますが、データにバインドできる「IsComplete」については、StoryBoardにそのような依存性プロパティはないため、このインスタンスでは必須と考えています。

+0

Attachedプロパティで何かしていますか?私はまだそれらをいつ使用するかわかりません。私はストーリーボードを拡張してそれにバインドするために使用できますか? –

+0

もちろん、ストーリーボード用のIsCompleteを模倣するために添付プロパティを使用することもできますが、それはさらに多くのコードを含み、イベントハンドラを記述することになります。 – Reddog

+0

事実私は点滅を伴う多くのアイテムを持っているということです。プロパティをバインドできれば、すべてのCompletedイベントをコーディングするコードが少なくなります。次に、添付されたプロパティを見てみましょう。あなたはそれが可能だと確信していますか? –

0

あなたはそうしないでください。

viewmodelは、ビューがアニメーションの実行を終了したときにはもちろん、ビュー*についてのヒントを持たないはずです。 VMがIsDirtyプロパティを持っていることは絶対に良いことです。ビューはこれまでのことを行い、VMはそれについて知る必要はありません。ただし、そのフラグの使用状況を確認する必要があります。一般的な使用方法は、データが変更された状態と保存されていない状態であることを示すことです。UIアニメーションが終了してもVMがまだダーティな状態になっているため、データが変更されるたびにアニメーションが表示されます(代わりに通常のPropertyChangedイベントを使用します)。

編集:
ここにコメントに対する回答が少しあります。

IsDirtyは、変更についてユーザーに通知する必要があることを意味します。

データが変更されたことをユーザーに通知する方法は多数あります。これは、ステータスエリアのアイコン、UIフラッシュなどのワンタイムイベントになります。IsDirtyフラグは、変更されたデータがいつ保存されたかを知っているので、VMによってのみリセットされます。ビューは保存メカニズムをトリガーするボタン(または何でも)を提供しますが、実際にデータが実際に保存されたかどうかはわかりません。そのため、ビューはそのフラグをリセットしてはいけません。通知が完了したことを示すためにビューを表示する必要はありません。ユーザがデータとやり取りするのを防ぐために、アニメーションが実行されている間に保存ボタンやその他のUI要素を無効にすることができます。

あなたはごと時間データの変更を通知したい場合は上記のようにINotifyPropertyChangedインターフェイスを実装して、あなたはVM上のインタフェースを介してPropertyChangedイベントを公開することができ、そして、その後、ビューがそれを購読することができますし、トリガすることができますあなたが興味を持っているプロパティの変更のアニメーション。レートを制限するように注意する必要があります - 急なプロパティの変更に対応してアニメーションに夢中になりたくはありません。

*私はまだ、ビューを知っていて、ビューを操作したり応答したりすることのできるVMの有効な使用を見ていません。多くの人がそれをやっていますが、そのアプローチにそれらを強制するのは悪い設計です。

+0

私はあなたが何を意味しているのか知っていますが、質問をあまりにも速くて簡単すぎると書いていると思います私は同意する、VMはビューについての手掛かりがありません。 IsDirtyは、変更についてユーザーに通知する必要があることを意味します。ユーザーがViewから通知を受けると、ViewがBindingを介してIsDirtyプロパティをリセットする必要があることを理解しています(これは、私が探しているもの、アニメーションが終了したときに通知するdpです)。このようにして、ViewはVMの権利を認識しません。 –

+0

私の編集をチェックしてください。 – slugster

+0

私は、IsDirtyというプロパティの名前はあなたを混乱させていると思います。この値を使用して、変更を通知する必要があることをユーザーに通知し、保存しないように指定します。 ViewModelはViewを認識しないので、ユーザーに通知されたかどうかを知る方法がありません。 –

関連する問題