我需要在不同的流程开始时显示某种动画。我最初的想法是简单地将一些<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/)可能允许你在一个共同的内容区域适应动态视图。 –