[英]C# WPF UserControl set a property
嗨,我做了我自己的UserControl,它是一個小的Windows資源管理器。
我在控件中定義了一個屬性,該屬性設置了資源管理器應從列出目錄開始的路徑:
public string SetRootPath
{
get { return rootPath; }
set { rootPath = value; }
}
和即時通訊用方法“ listDirectory”綁定我擁有的TreeView
public UserControl1()
{
InitializeComponent();
this.DokumentBrowser.ItemsSource = listDirectory(SetRootPath);
}
即時通訊時,我嘗試將SetRootPath屬性設置為本地路徑
<mycontrol:UserControl1 SetRootPath="c:\\temp" />
Variabel SetRootPath每次都為null,並且由於未分配任何內容,因此出現異常。 那么,為什么屬性永遠不會設置為我分配的值呢?
問候
XAML解析器首先構造用戶控件,然后設置SetRootPath屬性。 因此,在UserControl1的構造函數中,SetRootPath為null。 你應該移動線
this.DokumentBrowser.ItemsSource = listDirectory(SetRootPath);
到UserControl1生命周期的后期。 或改為使用依賴項屬性,並編寫一個OnPropertyChanged處理程序。 (請參閱http://msdn.microsoft.com/en-us/library/ms752914.aspx )。
您正在構造函數中訪問SetRootPath
。 到那時,XAML還沒有機會設置您的屬性,因此它仍然為null
。 嘗試在UserControl生命周期的稍后時間設置DocumentBrowser的ItemsSource。 一個不錯的選擇是SetRootPath
的設置SetRootPath
。
(實際上,還有更多類似“ WPF的”選項可以執行此操作:
選項A:將SetRootPath
為依賴項屬性,並在其PropertyChanged回調期間更改DocumentBrowser.ItemsSource。
選項B:與選項A相似,但不處理PropertyChanged。 而是使用應用listDirectory
的轉換器將DocumentBrowser的ItemsSource屬性綁定到SetRootPath
屬性。
PS:我稱其為RootPath
,而不是SetRootPath
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.