我需要在不同的流程開始時顯示某種動畫。我最初的想法是簡單地將一些<ContentControl>
標籤添加到XAML中,並將它們綁定到View Model對象中的一個屬性,然後將該屬性簡單地分配給ProgressBar
,一些繁忙的微調器或其他任何東西。動態呈現控件的MVVM方式
這個工程,但我不喜歡它。我不喜歡它的主要原因是因爲視圖模型不應該將自己介入到演示文檔中,而且這種模式明顯打破了這種模式。
這差不多就是我的(醜陋的)的代碼看起來像ATM:
XAML:
<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動態創建動畫控件的模式?
請注意,我已經測試,我聲明瞭三個不同的動畫控件,然後結合自己的Visibility
屬性視圖模型狀態的解決方案。然而,這在我的書中低於標準,因爲我不想隱藏控件,我希望它們在沒有需要的情況下消失。此外,這也將使不可能動態地使用不同類型的動畫來滿足任何需求。
有人嗎?
當MVVM是斷裂的點,附加的行爲(http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx)來救援。另外探索PRISM(http://compositewpf.codeplex.com/)可能允許你在一個共同的內容區域適應動態視圖。 –