【问题标题】:wpf - bind label widths to calculated length propertywpf - 将标签宽度绑定到计算的长度属性
【发布时间】:2010-11-12 17:16:58
【问题描述】:

如果我在视图上有一个标签,我希望其宽度等于同一视图上的一个网格中两列的宽度,我将如何在不使用转换器的情况下设置绑定?我应该使用属性来执行我的计算并存储一个值吗?我的意图是,如果视图的网格大小发生变化,那么这个标签的大小也会发生变化以匹配两列的新宽度。

我应该把这个逻辑放在哪里?我正在尝试遵循 MVVM 模式,但我看到很多关于“MVVM 中的转换器”的线程都说要将逻辑放入视图模型中。

我尝试使用视图上的依赖属性来实现此行为,因为我的视图模型在技术上不知道我的视图(那么我的视图模型如何知道我的列当前有多宽?)。这与我在网上阅读的内容背道而驰。在实现此行为时,我注意到我不能按名称引用列,除非我的属性不是静态的,但依赖属性是静态的,所以我不确定如何在不创建更多属性来保存值的情况下调整我的值。

有人可以在这里提供帮助吗?我觉得我把这件事复杂化了。我只需要这个标签放在这两列上,但它们会伸展。它只是提供网格中相关字段的可视化分组。一旦我能做到第一个,其他两个应该同样相似。

【问题讨论】:

    标签: wpf mvvm binding viewmodel


    【解决方案1】:

    我的经验法则是,如果它与“视图”相关,那么就让它远离 ViewModel。根据您的描述,这听起来像是纯粹的视图相关,所以我只会在代码隐藏或转换器中使用逻辑。

    现在我不明白你为什么不愿意使用转换器。使用转换器,您当然不希望存储会导致混淆或重构痛点的业务逻辑,但如果您有一些需要为特定视图操作转换的值,那么转换器正是您应该使用的.

    所以我的建议是转换器...如果它与视图相关,那么请随意使用转换器和代码隐藏...实际上您应该使用它们而不是 ViewModel。

    这有帮助吗?

    【讨论】:

    • 我不反对转换器。我在一些我的第一个 wpf 东西中使用了它们。我一直在尝试将我的 wpf 应用程序方法构建为更多的 mvvm-esque 方法,所以我不愿意使用它们严格基于我读过的关于 mvvm 的“最佳实践”。与 mvvm 的所有东西一样,有很多相反的论点可以让我很清楚为什么我仍然应该使用它们。似乎每个人对 mvvm 的解释都有不同的分隔边界,所以这确实让我很难选择最适合未来使用的方式。
    • 我最终没有使用转换器,而是使用了一些 dp 和一些回调方法来为我计算。我把它全部放在视图中,因为它是特定于视图的。感谢您的意见,克里斯。
    • 没问题...您做出了正确的选择...您选择了让您感到舒适的选择。我不相信任何人应该仅仅因为它是“最佳实践”而做某事,然后他们就无法重构或理解。显然,您不会做任何让其他人生活困难的事情,也不会做任何妨碍可扩展性或不稳定的事情......之后就做感觉正确的事情。祝你好运
    猜你喜欢
    • 2014-04-26
    • 2019-07-30
    • 2011-01-20
    • 2011-01-18
    • 2011-11-29
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多