当我使用 webclient 对象异步加载图像时,会显示一个进度条。下载图像后,我在我的 View 模型中将 loadingComplete bool 属性设置为 True 以指示加载过程已完成。目前,我将此值用于附加属性以将焦点设置在控件上。
我想要的是折叠进度条控件,然后显示图像。
我想知道什么是最好的方法,以下方法的优缺点是什么?
我应该
1) 在 viewmodel 上创建一个 LoadingOpacity bool 属性,然后我可以将其设置为将进度条的不透明度设置为 0.0(这将在设置 loadingComplete 时设置)?
2) 或者我应该创建一个转换器 (IValueConverter) 并使用 loadingComplete 属性将其转换为 Visibility.Collapsed 值。这样我的 View 模型中就不需要任何额外的属性了吗?
3) 或者我应该在 View 模型上创建一个折叠属性并将其绑定(bind)到进度条的可见性属性?
4) 或者是否有其他方法可以做到这一点?
谢谢 京东
最佳答案
- 由于鼠标点击测试,我不会选择不透明度解决方案。您的透明元素在点击测试时仍然可见,但您可能希望在下载完成后淡出进度条,但也许由事件触发的 Storyboard 是更好的选择。
- 我个人喜欢值转换器,它们简单、简洁、描述性强且切题。 这也被广泛认为是正确的选择。
- MVVM 最佳实践规定 View 模型不知道 View 。通过将
Visibility
类型的属性引入 View 模型,您可以以某种方式(尽管很微小)将其耦合到 View 。 - 可能:)
关于wpf - 删除布局元素的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1992756/