【问题标题】:What is the best way to remove a layout element删除布局元素的最佳方法是什么
【发布时间】:2010-01-02 20:37:23
【问题描述】:

当我使用 webclient 对象异步加载图像时,显示了一个进度条。下载图像后,我在视图模型中将 loadingComplete bool 属性设置为 True,以指示加载过程已完成。目前,我正在将此值用于附加属性以将焦点设置在控件上。

我想要的是折叠进度条控件,然后显示图像。

我想知道的是最好的方法是什么,以下方法的优缺点是什么?

我应该

1) 在 vi​​ewmodel 上创建一个 LoadingOpacity bool 属性,然后我可以将其设置为将进度条的不透明度设置为 0.0(这将在设置 loadingComplete 时设置)?

2) 或者我应该创建一个转换器 (IValueConverter) 并使用 loadingComplete 属性将其转换为 Visibility.Collapsed 值。这样我的视图模型中就不需要任何额外的属性了吗?

3) 还是应该在视图模型上创建一个折叠属性并将其绑定到进度条的可见性属性?

4) 还是/是否有其他方法可以做到这一点?

谢谢 京东

【问题讨论】:

    标签: wpf silverlight xaml


    【解决方案1】:
    1. 由于鼠标命中测试,我不会使用不透明度解决方案。您的透明元素仍然是命中测试可见的,但是您可能希望在下载完成后淡化进度条,但也许由事件触发的情节提要是更好的选择。
    2. 我个人喜欢价值转换器,它们简单、简洁、描述性强且切中要害。 这也被广泛认为是正确的选择。
    3. MVVM 最佳实践要求视图模型不知道视图。通过将Visibility 类型属性引入您的视图模型,您可以以某种方式将其与视图耦合(尽管很短)。
    4. 可能:)

    【讨论】:

    • 是的 - 我的选项 2 也是 :)
    • 谢谢大家。关于 3,视图模型是否应该更加面向模型/业务?我的意思是通过阅读属性,我可以弄清楚它们的用途,但是如果我引入不透明度或可见性,它就会变得更难理解,并且它们将特定于我拥有的视图(如果我换掉视图,那么它们可能根本不会被使用)。
    • 一般来说,VM 应该包含或多或少反映业务模型中的属性。 VM 是视图感知的,因此它可能还包含有助于视图操作的属性,例如更改通知(最明显的)、表示视图状态的属性(只读、编辑、添加)、命令属性等。
    • +1 表示选项 2,但我认为您应该突出显示选项 2 作为首选选项。虽然这是您个人的偏好,但我认为您可以更强烈地声明它是这种情况下的正确选择。
    猜你喜欢
    • 2012-06-30
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多