gpt4 book ai didi

wpf - 绑定(bind)到 View 模型中的可见性是一个好的设计吗

转载 作者:行者123 更新时间:2023-12-03 10:16:04 25 4
gpt4 key购买 nike

最近我和我的同事正在讨论 View 绑定(bind)到 viewModel 中的可见性属性。

在我们的一个项目中,为了使控件可见/折叠,我的同事绑定(bind)了一个可见性属性,viewModel 将在必要时将该属性设置为 Visibility.Visible/Visibility.Collapse。

它有效,但我想知道它是不是一个好的设计。

正如我所想,如果 viewModel 将属性设置为 Visible/collapse,那么 viewModel 知道 View 在做什么,而不是它应该包含一个 bool 属性并且 View 应该绑定(bind)到一个 bool 属性并使用转换器来决定是否使元素可见/折叠。在这种情况下,viewmodel 对 View 一无所知。

例子:如果用户属于一个团队,则显示一个 TextBlock(团队名称)

private bool _isUserBelongsToTeam;
public bool IsUserBelongsToTeam
{
get { return _isUserBelongsToTeam; }
set { _isUserBelongsToTeam = value; NotifyPropertyChange("IsUserBelongsToTeam"); }
}

XAML:
<TextBlock Text= "Team name" Visibility= "{Binding IsUserBelongsToTeam, Converter={StaticResource BoolToVisibilityConverter}}" />

private bool _isTeamVisible;
public bool IsTeamVisible
{
get { return _isTeamVisible; }
set { _isTeamVisible= value; NotifyPropertyChange("IsTeamVisible"); }
}

XAML:
<TextBlock Text= "Team name" Visibility= "{Binding IsTeamVisible}" />

哪种方式更好实现?

最佳答案

  1. 请记住,您花更多时间阅读代码,然后是编写代码。因此,“IsTeamMember”比“IsTeamVisible”更好。 IsUserBelongsToTeam 很糟糕(不合语法):)

  2. 我刚刚在我们的 WPF 应用程序中重写了整个模块。我没有使用单个“IsXYZVisible”属性。我将 ContentPresenter 与 DataTemplates 一起使用,当我不想显示内容时,我将 ContentPresenter 中的 Content 属性设为 null。这样我就有了:更简单的 xaml,更简单和更小的 View 模型,代码更好地反射(reflect)了 View (如果在调试期间,我看到 XYZ sub-viewModel 属性为 null,那么我知道它没有被渲染,而且我没有搜索 IsXYZVisible 或类似属性),单元测试更简单。

关于wpf - 绑定(bind)到 View 模型中的可见性是一个好的设计吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44331397/

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