1
我可以给元素一个自定义属性/属性/字段以简单的方式存储关于它们的信息吗?像myobject.parentid(parentid是在创建对象时由我设置的一个数字,然后在与此对象交互时通过myobject.parentid检索)。我可以给Shape或其他对象一个自定义属性,如“MyCustomID”吗?
或者正在存储像myobject.Name或myobject.Tag这样的最简单的方式吗?
我可以给元素一个自定义属性/属性/字段以简单的方式存储关于它们的信息吗?像myobject.parentid(parentid是在创建对象时由我设置的一个数字,然后在与此对象交互时通过myobject.parentid检索)。我可以给Shape或其他对象一个自定义属性,如“MyCustomID”吗?
或者正在存储像myobject.Name或myobject.Tag这样的最简单的方式吗?
最简单的方法是在WPF中使用Attached Property。
附加属性允许您创建任何属性并将其与元素相关联。然后,您可以使用它来存储数据并参与绑定方案。
public class MyCustomIdSource
{
public static readonly DependencyProperty MyCustomIdProperty =
DependencyProperty.RegisterAttached("MyCustomId", typeof(Int32), typeof(MyCustomIdSource));
public static void SetMyCustomId(UIElement element, Int32 value)
{
element.SetValue(MyCustomIdProperty, value);
}
public static Int32 GetMyCustomId(UIElement element)
{
return (Int32)element.GetValue(MyCustomIdProperty);
}
}
但是,您可能希望通过将自定义数据放入WPF元素本身来考虑您正在实现的目标。你真的想让这个元素负责吗?把这个责任分解成一个维护观点的逻辑和状态的类,然后把观点与它联系起来会更有意义吗?这被称为Model-View-ViewModel模式,非常适合WPF开发。
对于所有关于附加属性的说法,您都说得对,我还建议使用它们,因为类型安全。但是如果你正在认真寻找在FrameworkElement上存储更多信息的最简单的方法,那么它就是'Tag'属性。 – Clemens 2012-02-20 18:54:47
@Clemens - 你知道,你是对的,那将是最简单的开始(我甚至不知道还有'Tag'属性),但是持续维护该财产中的数据压倒任何“简单”的概念。我记得VB *不寒而栗时,使用那个看似简单的属性是多么快速和多么痛苦的崩溃。 – codekaizen 2012-02-20 19:11:15
谢谢:)这看起来像我脑子里想的那样。它可能太复杂,不值得?我可能需要解释一点...我在代码中动态创建对象。当它们中的一个与之交互时,我会想知道它是否具有“parentid”或其他小的属性,如“id”,“datasize”,“url”等。将它们放在Name/Tag中似乎更简单,除非我错过了什么?例如:object.Name =“9_2_24”。 ....否则,每次都必须从原始来源(即数据库)请求。如果“myObject.parentid”会是理想的,但... – Ael 2012-02-20 19:15:49