2010-02-16 57 views
3

全部,爲什麼我的通用列表在運行時在XAML中填充爲空?

我有一個定製的用戶控件中定義的通用列表。

private List<string> m_AnimationNames = new List<string>(); 

public List<string> AnimationNames 
     { 
      get { return this.m_AnimationNames; } 
      set { this.m_AnimationNames = value; } 
     } 

我在xaml中引用這個列表,然後填充它,像這樣。

<local:AnimatedCharacter.AnimationNames> 
     <System:String>Walk</System:String> 
     <System:String>Run</System:String> 
     <System:String>Talk</System:String> 
</local:AnimatedCharacter.AnimationNames> 

然後我嘗試在代碼的其他地方引用這個名單,之後的InitializeComponent()被調用,列表總是返回一個大小爲0,不包含任何元素。

爲什麼此列表在運行時爲空?當我在代碼中訪問它時,我錯過了什麼讓這個列表計數爲0?

全部類別:

public partial class AnimatedCharacter : UserControl 
    { 

     private List<string> m_AnimationNames = new List<string>(); 



     public AnimatedCharacter() 
     { 
      InitializeComponent();       
      DoSomething(); 
     } 


     public List<string> AnimationNames 
     { 
      get { return this.m_AnimationNames; } 
      set { this.m_AnimationNames = value; } 
     } 


     public void DoSomething(){ 
      Console.WriteLine("Anim: " + AnimationNames.Count); 
     } 
    } 
} 

XAML實例:控制加載調用DoSomething的後

<local:AnimatedCharacter x:Name="ac_guy1" Height="315" Width="273" Canvas.Left="-666" Canvas.Top="-99" >    
      <local:AnimatedCharacter.AnimationNames> 
       <System:String>Walk</System:String> 
       <System:String>Run</System:String> 
       <System:String>Talk</System:String> 
      </local:AnimatedCharacter.AnimationNames> 

</local:AnimatedCharacter> 

回答

4

(等待加載的事件)。你在呼喚它在構造函數中,前AnimationNames屬性已通過XAML設置:

public AnimatedCharacter() 
{ 
    InitializeComponent();       

    this.Loaded += new RoutedEventHandler(OnLoaded); 
} 

private void OnLoaded(object sender, RoutedEventArgs e) 
{ 
    this.DoSomething(); 
} 
+0

非常好。謝謝! – csciguy

4

邁克爾有解決方案,但讓我解釋一下是怎麼回事。

當XAML分析器達到XAML中的這一部分: -

<local:AnimatedCharacter 

它構建的AnimatedCharacter一個新的實例,其中包括因此它的構造函數的執行過程中,InitialiseComponent和任何其他在構造函數中。當然,在那個時候,沒有任何屬性被解析並分配給適當的屬性,並且Xaml中的子內容還沒有被解析並添加到列表中。

時的XAML用於控制整個已經閱讀並控制已被添加到可視化樹的Loaded事件觸發。因此,如果您需要使用加載的List,則需要在不在構造函數中的Loaded事件處理程序中執行此操作。

+0

非常好。謝謝安東尼!這清除了一些東西。我有點不確定裝載在那裏。 – csciguy

相關問題