动态呈现控件的方式MVVM

我有一个需要显示某种动画作为不同的进程得到启动。 我最初的想法是简单地增加一些<ContentControl>标签到XAML并将其绑定到后来干脆转让该物业的在视图模型对象的属性ProgressBar ,有的忙着微调或什么的。

这工作,但我不喜欢它。 我不喜欢它的主要原因是因为视图模型不应涉及自己在演讲事宜及该图形,清楚打破了范例。

这是非常有什么我(丑陋的)的代码看起来像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)

那么,有没有更好的方式来实现这一目标。 Preferrably,在那里我可以创造我的动画控件的动态模式使用XAML一个人吗?

请注意,我已经测试过,我声明了三个不同的动画控件,然后绑定自己的解决方案Visibility属性视图模型状态。 然而,这是低于标准杆在我的书,因为我不想只是隐藏控制,我想除非需要它们消失。 此外,这也将使得不可能动态为任何需要可使用不同类型的动画。

有人吗?

--------------解决方案-------------

嗯,你的视图模型知道的操作和进步本身。 其余的可以通过触发器来实现。 至少这就是我们做的方式。 所以,你的ViewModel有例子,它被设置当你的视图模型启动一个BackgroundWorker加载一个大图像的财产“IsLoadingImage”,还返回由BackgroundWorker的“ImageLoadingProgress”现在这两个特性足以传递给你查看报告的进展。 你的看法,由一个进度条,或为您的特殊动画自定义的控制。 现在,您可以在一个触发器来切换进度/动画控制的可视性和这些价值必然要“ImageLoadingProgress”绑定“IsLoadingImage”。

就像我说的,这就是我们如何处理它,而我们的应用使得大量使用MVVM的。

编辑要评论作出回应: 如何更改模板触发

<ControlTemplate x:Name="ActiveTemplate" TargetType="{x:Type MyType}">
<!-- Template when active -->
</ControlTemplate>

<ControlTemplate x:Name="DeactivatedTemplate" TargetType="{x:Type MyType}">
<!-- Template when deactivated -->
</ControlTemplate>

<Style TargetType="{x:Type MyType}">
<Setter Property="Template" Value="{StaticResource DeactivatedTemplate}"/>

<Style.Triggers>
<DataTrigger Binding="{Binding IsActive}" Value="True">
<Setter Property="Template" Value="{StaticResource ActiveTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>

这是假设MyType是可以有一个控制ControlTemplate并且该DataContext有一个属性IsActive切换模板。

分类:WPF 时间:2015-03-15 人气:4
本文关键词: WPF,XAML,动画,动态
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.456 (s). 10 q(s)