想象一下,这些属性被键入为UIElements(或其他一些 WPF 特定对象)。您将如何将对象添加到不是UIElements的控件?
您必须提供从 WPF 对象派生的包装器,以公开您需要的信息。大多数时候,包装器会简单地调用被包装对象的ToString()。鉴于您将使用的大多数类型都提供了足够好的ToString()的默认实现,因此只需调用它而不是让开发人员为所有内容编写包装器是有意义的。
其次,想象一下它们是否被键入为某个界面。如果您想传达此界面无法传达的内容怎么办?唯一的选择是 (a) 开发人员忍受框架的限制或 (b) 微软更新界面并破坏所有已经编写的现有代码。
还要考虑您是否使用像 MVVM 这样的模式。当前的设计意味着您的视图模型可以以任何方式公开与 WPF 无关的属性,这最终使您的代码在不同技术中更具可重用性。
最后,请记住,表示属性的对象与 WPF 呈现该信息的方式之间存在差异。例如,如果您使用诸如System.String之类的原始类型,WPF 将创建一个文本块并将 text 属性设置为ToString()的结果。这允许UI 显示的数据与 UI呈现信息的方式之间非常清晰的分离。
以一个表示菜单项的简单类为例,例如:
public class MenuItem
{
public string Text { get; set; }
public bool IsChecked { get; set; }
public bool IsEnabled { get; set; }
}
此类型仅公开有关菜单项的数据,并且没有有关应如何呈现此信息的信息。实际上,除了类的名称 ( MenuItem ) 之外,这甚至不是特定于菜单项的,并且相同的数据可以在另一个 UI 控件中使用,例如选中的列表框,而无需进行任何更改。如果该类公开了 WPF 特定的用户界面元素,那么信息将需要由另一种类型来适应每个不同的用户界面控件。