gpt4 book ai didi

wpf - 使用ContentControl生成 View (UserControls)

转载 作者:行者123 更新时间:2023-12-03 10:48:45 24 4
gpt4 key购买 nike

我有一个UserControl(MainView),它需要在其内部显示另一个UserControl。根据某些条件,它将显示AView或BView(它们都出现在MainView中的同一位置)。我使用的是ViewModel第一种方法,因此, View 是通过数据模板生成的:

public class AView : UserControl { }
public class BView : UserControl { }
public class AViewModel : ViewModelBase { }
public class BViewModel : ViewModelBase { }

从资源使用的角度来看,这两种方法之间存在区别:

1)具有一个ContentControl
<ContentControl Content="{Binding SomeViewModel}" />

private ViewModelBase _someViewModel;
public ViewModelBase SomeViewModel
{
get {return _someViewModel;}
set
{
if (!ReferenceEquals(_someViewModel, value))
{
_someViewModel = value;
RaisePropertyChange(SomeViewModel);
}
}
}

这样,我可以选择将哪个ViewModel(AViewModel或BViewModel)设置为SomeViewModel,然后DataTemplates将选择要显示的适当 View 。

2)放置两个ContentControl,并控制每个控件的可见性(一次只能看到一个)。
<ContentControl Content="{Binding AViewModel}"
Visibility="{Binding SomeCondition}" />

<ContentControl Content="{Binding BViewModel}"
Visibility="{Binding NotSomeCondition}" />

那么,从资源管理的角度来看,在这两个 View 之间切换会表现出不同的效果,还是在两种情况下在给定的时间仅一个 View 驻留在内存中?

最佳答案

WPF卸载不可见的对象,因此在任何给定时间,两种方法都只会加载您的一个 View ,但是您的第二个方法将在UI中创建两个ContentControl,而第一个仅创建一个。

此外,只要您的内容 View 模型发生更改,评估Visibility的开销就会增加(很小)。由于您将DataTemplate设置为Content,因此将以任何一种方式评估ViewModel,WPF必须通过查找DataTemplate来确定如何绘制ViewModel

我个人更喜欢第一个版本。维护和管理起来更容易,尤其是当您拥有两个以上的 View 并且一次仅在用户界面中存在一个ContentControl

关于wpf - 使用ContentControl生成 View (UserControls),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15550344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com