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