2010-11-12 106 views
0

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

我应该把这个逻辑放在哪里?我试图遵循MVVM模式,但是我发现很多关于“MVVM中的转换器”的线索都说把逻辑放入视图模型中。

我试图用我的视图上的依赖属性来实现这种行为,因为我的viewmodel在技术上对我的视图没有任何知识(所以我的viewmodel如何知道我的列目前有多宽?)。这违背了我在网上阅读的内容。当实现这种行为时,我注意到我不能通过名称来引用我的列,除非我的属性不是静态的,但依赖属性是静态的,所以我不知道如何在没有创建更多属性来保存值的情况下对我的值进行洗牌。

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

回答

1

我的经验法则是,如果它是“查看”相关,然后远离ViewModel。从你的描述中,这听起来像是纯视图相关的,所以我只是在代码隐藏或转换器中使用逻辑。

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

所以我的建议是转换器...如果它是查看相关,然后随意使用转换器和Codebehind ...其实你应该使用它们而不是ViewModel。

这有帮助吗?

+0

我不反对转换器。我在一些我的第一个WPF的东西中使用它们。我一直在试图将我的wpf应用程序方法构建为更多的mvvm-esque方法,所以我不愿意使用它们严格基于我读过的有关mvvm的“最佳实践”。就像mvvm的所有事情一样,有很多反对的论点,使我对为什么仍然会使用它们有很多的了解。看起来每个人对mvvm的解释都有不同的分隔界限,所以这对我来说很难选择最适合未来的使用。 – TWood 2010-11-12 17:43:35

+0

我最终没有使用转换器,但一些dp和一些回调方法为我做了我的计算。尽管它是视图特定的,但我把它全部放在视图中。谢谢你的输入Chris。 – TWood 2010-11-12 19:54:11

+0

没有问题...你做出了正确的选择......你随着自己感觉舒适而去。我认为任何人都不应该因为它是“最佳实践”而做某些事情,之后他们不能重构或理解。很明显,你不会做任何让他人生活困难的事情,也不会做出阻碍可扩展性或不稳定的事情......之后就是做正确的事情。祝你好运 – 2010-11-12 23:31:56