Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 魔弦_C#_Wpf_Mvvm - Fatal编程技术网

C# 魔弦

C# 魔弦,c#,wpf,mvvm,C#,Wpf,Mvvm,因此,我与WPF和第三方供应商(如Infragistics)的合作越多,似乎有一种常见的做法让我感到困惑 为什么模板部件有“神奇的字符串” 从《盗梦空间》开始,我在这个领域学到的一切都是MVVM,解耦,没有神奇的字符串和数字,没有人知道其他人,等等 如果是这样的话,难道没有更好的方法吗?为什么我们接受这一惯例 最近,我能找到的所有指向原始WPF“最佳实践指南”的链接似乎都不存在了,但据我回忆,这是XAML团队的惯例。由于XAML控件的性质,您可以通过各种方式对其进行自定义,“PART_”前缀警

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

为什么模板部件有“神奇的字符串”

从《盗梦空间》开始,我在这个领域学到的一切都是MVVM,解耦,没有神奇的字符串和数字,没有人知道其他人,等等


如果是这样的话,难道没有更好的方法吗?为什么我们接受这一惯例

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

模板化就是要更改控件的可视部分。命名是标记这些零件的一种方式,以便它们可以在其他地方引用

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}" ... >
公共类MyParts{
公共静态常量字符串MyFoo=“PART\u Foo”;
}
[TemplatePart(Name=MyParts.MyFoo)]

IMO这不是的副本,因为这个问题是问为什么名称是“PART_uu”而不是“m_u”,而这个问题是问为什么模板部分是字符串而不是其他东西。@CameronMacFarland我必须同意你的观点,标记的副本与我的问题无关。然而,现在它已经关闭了,它已经死了…:-(无法从中恢复……另一种情况是,字符串引用出现在绑定/触发器中的命名引用中。不过,实际上,这些不应被视为原始字符串,而应被视为标识符名称,就像类名称或属性名称一样。主要区别在于静态分析的可用性降低请确保您的命名标识符被适当引用,从而为诸如拼写错误之类的事情启用运行时失败。不过,最终,这是同一个概念。@DanBryant我会买的。@DanBryant我已经在我的答案中添加了它-您可以将magic String设置为常量,并使用它们,从而减少拼写错误。