WPF魔术队

时间:2015-07-23 16:48:18

标签: c# wpf mvvm

因此,我与WPF和Infragistics等第三方供应商合作越多,似乎有一种常见的做法让我感到困惑。

为什么模板部件有“魔术字符串”?

enter image description here

我从一开始就被教导到这个领域的一切都是MVVM,解耦,没有神奇的字符串和数字,没有人知道其他人,等等...

那么,如果是这样的话,那么有没有更好的方法呢?为什么我们接受这种做法?

2 个答案:

答案 0 :(得分:3)

模板化就是改变控件的可视部分。命名是一种标记这些部分的方法,因此可以在其他地方引用它们。

MVVM是关于将数据绑定到控件,但是模板只是一个视图问题,因此模板化对于MVVM的了解并不明白。

当您更改模板时,您不需要了解控件将被绑定的任何数据。如果控件模板是特定于数据的,那么我认为这是一种反模式。

DataTemplates是您希望使用与数据相关的模板的地方。然后在控件模板中,您可以使用ContentPresenter或ItemsPresenter等演示者将控件模板放在某处以显示数据。

旁注 - 通常这些东西只是设置为字符串,但可以定义为常量,因此你可以重构它们等等。

public class MyParts {
    public static const string MyFoo = "PART_Foo";
}

[TemplatePart(Name = MyParts.MyFoo)]

<Button x:Name="{x:Static parts:MyParts.MyFoo}" ... >

答案 1 :(得分:0)

我可以找到原始WPF“最佳实践指南”的所有链接似乎已经死了,但据我所知,这是XAML团队的惯例。由于XAML控件的性质,您可以以各种方式自定义它们,“PART_”前缀警告您,有一些代码将直接查找该元素并对其执行某些操作。因此,您实际上不希望删除它或更改名称或控件的基本功能将停止按预期运行,但您可以在其周围添加其他元素以自定义其工作方式。