在我们的产品中,我们使用MVVM模型的第一种方法,它很好地工作,但有一点需要注意.当视图变得复杂时,从数据模板创建它需要时间.如果经常显示和隐藏视图,它会变得有点刺激.如果首先使用视图,那么在需要时缓存视图会很容易 - 但是当首先使用DataTemplate和模型时,我们对视图创建没有太多控制.有没有人在没有切换到第一种方法的情况下解决了这个问题?
如果使用@blindmeis的想法,可以很好地工作.
总体配方:
创建名为ViewCache的ContentControl或UserControl:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
在DataTemplate中,使用ViewCache,传递要使用的实际视图的类型:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2379 次 |
| 最近记录: |