在我们的产品中,我们使用MVVM模型的第一种方法,它很好地工作,但有一个警告。当视图变得复杂时,需要花时间从数据模板创建它。如果视图经常显示并隐藏,则会变得有些刺激。如果首先使用视图,如果需要缓存视图会很容易 - 但是当首先使用DataTemplate和模型时,我们对视图创建没有太多控制。 任何人都已经解决了这个问题,而没有切换到视图第一方法?使用模型优先方法时,可以缓存视图吗?
回答
with viewmodel first approach我认为你没有机会“缓存”视图。因此您可能会考虑首先使用视图和重量级数据模板工作流的视图模型定位器。 here是使用带有列表的数据模板的解决方案。
但也许有重写wpf datatemplate机制的任何解决方案?
编辑:如果您为viewmodel只创建一个“markerview”,那么wpf datatemplate可以找到它。然后在这个标记视图中创建/补充真实视图?像一个查看服务定位器?
如果使用@blindmeis想法,可以很好地工作。
的整体配方:
创建ContentControl中或用户控件命名视图缓冲:
public partial class ViewCache
{
public ViewCache()
{
InitializeComponent();
Unloaded += ViewCache_Unloaded;
}
void ViewCache_Unloaded(object sender, RoutedEventArgs e)
{
Content = null;
}
private Type _contentType;
public Type ContentType
{
get { return _contentType; }
set
{
_contentType = value;
Content = ViewFactory.View(value); // use you favorite factory
}
}
}
在DataTemplate中,使用视图缓冲,传递你想用真正的视图类型:
<Window.Resources>
<DataTemplate DataType="{x:Type TestViewCache:Foo}">
<TestViewCache:ViewCache ContentType="{x:Type TestViewCache:View }"/>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ContentPresenter Height="200" Width="300"
Content="{Binding ViewModel}"/>
<Button Content="Set VM" Click="SetVMClick"/>
<Button Content="UnSet VM" Click="UnSetVMClick"/>
</StackPanel>
谢谢,但会写得更好 var control = view as Control; control.DataContext = DataContext; Content = view; – 2013-11-15 16:12:21
嘿,谢尔盖,我正在寻找视图缓存的解决方案,并找到你的实现。 我不太明白如何从父视图模型访问视图模型。我还必须访问'ViewCache'吗?那么在主视图模型中如何实现视图的变化呢? – derape 2015-02-09 15:32:40
- 1. 使用MEFedMVVM在父视图/视图模型中实现视图模型优先方法
- 2. 在视图模型中使用存储库可以吗?
- 3. 在1视图中有2个模型的方法,可以吗?
- 4. Excel可以优先吗?
- 5. 如果视图被缓存,是否可以跟踪模型视图的视图?
- 6. 我可以在django中重写模型方法的优点吗?
- 7. 模型可以观察视图吗?
- 8. 模型可以刷新视图吗?
- 9. 我可以在视图模型位图上使用MvxImageView吗?
- 10. 在视图中大量使用方法会妨碍缓存吗?
- 11. 是否可以在代码优先的模型中使用LinqPad
- 12. 在模型优先方法中使用分页列表?
- 13. 使用动态模型的代码优先方法
- 14. 使用EF4迁移工具和模型优先方法
- 15. KnockoutJS - 可以使用SPA的父/子视图模型吗?
- 16. 你可以在ASP.net MVC3中使用嵌套视图模型吗?
- 17. 使用地图缓存模式视图
- 18. 您可以使用实体框架4.1创建sql视图/存储过程代码优先方法
- 19. 轨道模型验证优先吗?
- 20. 您可以使用预先计算的模型启动Myrrix吗?
- 21. 代码优先或模型优先
- 22. 模型优先vs数据优先EF
- 23. 有什么方法可以改变两种赋值方法的优先级吗?
- 24. 使用大小模板优先于指针类型的方法的方法
- 25. 在模型 - 视图 - 控制器中,视图依赖于模型可以吗?
- 26. 我可以在Android视图内使用类方法吗?
- 27. Android可以缓存缓存清单HTML5视频离线吗?
- 28. 使用数据模型用方法填充视图模型以及
- 29. 可以将Solr用作缓存的替代方法吗?
- 30. 使用SimpleMembership与EF模型优先
对“markerview”的整洁的想法,我会看看它是否工作... – 2010-10-08 17:01:12
让我知道它是否工作;) – blindmeis 2010-10-08 18:01:10