2010-09-06 183 views
0

嗨,我做了我自己的UserControl,它是一個小小的Windows資源管理器。C#WPF UserControl設置屬性

public string SetRootPath 
    { 
     get { return rootPath; } 
     set { rootPath = value; } 
    } 

和IM結合,我有一個方法「listDirectory」

public UserControl1() 
     { 
      InitializeComponent(); 
      this.DokumentBrowser.ItemsSource = listDirectory(SetRootPath); 
     } 
樹視圖:

我在那臺在資源管理器應該從列出的目錄開始的路徑控件定義的屬性

當IM調用它,我嘗試將SetRootPath屬性設置爲本地路徑

<mycontrol:UserControl1 SetRootPath="c:\\temp" /> 

Variabel SetRootPath每次都是空的,我得到一個異常,因爲沒有分配任何東西。那麼,爲什麼財產從來沒有設定我分配的價值?

問候

回答

1

您在構造函數中訪問SetRootPath。在那個時候,XAML還沒有機會設置你的財產,所以它仍然是null。嘗試稍後在UserControl生命週期中設置DocumentBrowser的ItemsSource。一個不錯的選擇是SetRootPath的制定者。

(事實上,也有一些更多的 「WPF狀」 這樣做的選擇:

選項A:請SetRootPath依賴屬性和它的PropertyChanged回調過程中改變DocumentBrowser.ItemsSource

選項。 B:像選項A,但不處理的PropertyChanged相反,DocumentBrowser的ItemsSource屬性綁定到你的SetRootPath屬性,使用它適用listDirectory轉換器)

PS:我會叫它RootPath,不SetRootPath

+0

謝謝!把它放到更晚的狀態,它工作得很好。與依賴屬性,我應該讀一些關於這一點。我真的很喜歡這個東西,並且每天都會有很多新的印象。 – Mark 2010-09-07 07:57:48

2

XAML解析器首先構造用戶控件,然後設置SetRootPath屬性。因此,在UserControl1的構造函數中,SetRootPath爲null。您應該將行

this.DokumentBrowser.ItemsSource = listDirectory(SetRootPath); 

移動到UserControl1生命週期的稍後時間點。或者使用依賴項屬性,然後編寫一個OnPropertyChanged處理程序。 (見http://msdn.microsoft.com/en-us/library/ms752914.aspx)。

+0

+1爲MSDN鏈接。 – Heinzi 2010-09-07 08:48:56

+0

感謝您的簡要解釋。幫助我解決了我的小問題。 – dex3703 2013-01-16 17:48:11