2012-02-20 42 views

回答

3

最簡單的方法是在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開發。

+0

對於所有關於附加屬性的說法,您都說得對,我還建議使用它們,因爲類型安全。但是如果你正在認真尋找在FrameworkElement上存儲更多信息的最簡單的方法,那麼它就是'Tag'屬性。 – Clemens 2012-02-20 18:54:47

+0

@Clemens - 你知道,你是對的,那將是最簡單的開始(我甚至不知道還有'Tag'屬性),但是持續維護該財產中的數據壓倒任何「簡單」的概念。我記得VB *不寒而慄時,使用那個看似簡單的屬性是多麼快速和多麼痛苦的崩潰。 – codekaizen 2012-02-20 19:11:15

+0

謝謝:)這看起來像我腦子裏想的那樣。它可能太複雜,不值得?我可能需要解釋一點...我在代碼中動態創建對象。當它們中的一個與之交互時,我會想知道它是否具有「parentid」或其他小的屬性,如「id」,「datasize」,「url」等。將它們放在Name/Tag中似乎更簡單,除非我錯過了什麼?例如:object.Name =「9_2_24」。 ....否則,每次都必須從原始來源(即數據庫)請求。如果「myObject.parentid」會是理想的,但... – Ael 2012-02-20 19:15:49

相關問題