如果我在视图上有一个标签,我希望宽度等于同一视图中某个网格中两列的宽度,那么如何在不使用转换器的情况下设置绑定?我应该使用属性来执行计算并存储值吗?我打算如果视图的网格大小发生变化,那么这个标签的大小也会改变,以匹配两列的新宽度。
我应该把这个逻辑放在哪里?我试图遵循MVVM模式,但我看到许多关于“MVVM中的转换器”的线程说将逻辑放入viewmodel。
我尝试在我的视图中使用依赖项属性实现此行为,因为我的viewmodel在技术上不了解我的视图(那么我的viewmodel将如何知道我的列当前有多宽?)。这与我在网上看到的相反。实现这种行为时,我注意到我不能按名称引用我的列,除非我的属性不是静态的,但依赖属性是静态的,所以我不知道如何在不创建更多属性来保存值的情况下将我的值改组。
有人可以在这里提供帮助吗?我觉得我太复杂了。我只需要这个标签就可以坐在这两根柱子上然后伸展。它只是提供网格中相关字段的可视分组。一旦我能做到第一个,其他两个应该同样相似。
答案 0 :(得分:1)
我的经验法则是,如果它与“View”相关,那么请远离ViewModel。根据你的描述,这听起来像纯粹的视图相关,所以我只是在代码隐藏或转换器中使用逻辑。
现在我不明白为什么你不愿意使用转换器。使用转换器,您当然不希望存储会导致重构的混乱或痛点的业务逻辑,但如果您有一些需要转换为特定视图操作的值,那么转换器正是您应该使用的
所以我的建议是转换器...如果它与View相关,那么随意使用转换器和Codebehind ...实际上你应该使用它们而不是ViewModel。
这有帮助吗?