異なるプロセスが開始されると、ある種のアニメーションを表示する必要があります。私の最初のアイデアは、XAMLに<ContentControl>
というタグを追加してView Modelオブジェクトのプロパティにバインドし、単にこのプロパティをProgressBar
に割り当てたり、ビジーなスピナーなどを割り当てたものです。動的にコントロールを提示するMVVMの方法
これは機能しますが、私はそれが好きではありません。私が気に入らない主な理由は、ビューモデルがプレゼンテーションの問題に関与すべきではなく、このパターンがそのパラダイムを明確に破るからです。
これはかなり私の(醜い)コードは、ATMのようになります。
XAML:
ビューModelクラスで<ContentControl Content="{Binding ProcessAAnimation}" />
:だから
public object ProcessAAnimation
{
get { return _processAAnimation; }
private set
{
_processAAnimation = value;
OnPropertyChanged("ProcessAAnimation");
}
}
public object IsProcessARunning
{
get { return _processARunning; }
private set
{
if (value == _processARunning)
return;
_processRunnings = value;
if (value)
ProcessAAnimation = SomeNiftyAnimationControl();
else
{
if (ProcessAAnimation is IDisposable)
((IDisposable)ProcessAAnimation).Dispose();
ProcessAAnimation = null;
}
}
}
// (clipped: More properties for "Process B", "Process C" and so on)
、より良いパターンがありますこれを達成する。好ましくは、XAMLだけを使用してアニメーションコントロールを動的に作成できるパターンですか?
私はすでに私は、3つの異なるアニメーションコントロールを宣言し、表示モデルの状態に彼らのVisibility
プロパティをバインドするソリューションをテストしていることに注意してください。しかし、私はコントロールを隠すことはしたくないので、私の本ではそれは下にあります。私はコントロールを必要としない限り消えてしまいます。また、それによって、必要に応じてさまざまなタイプのアニメーションを動的に使用することも不可能になります。
誰でも?
MVVMは、ブレークのポイントである場合は、添付の行動(http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx)が救助のために来ています。また、PRISM(http://compositewpf.codeplex.com/)を見てみると、共通のコンテンツ領域に動的ビューを収めることができます。 –