簡體   English   中英

C#WPF UserControl設置屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM