C # WPF UserControl установить свойство - PullRequest
0 голосов
/ 06 сентября 2010

Привет, я сделал свой собственный UserControl, это маленький проводник Windows.

Я определил свойство в элементе управления, которое задает путь, по которому должен начинаться проводник из списка каталога:

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

и я связываю TreeView, который у меня есть, с помощью метода "listDirectory"

 public UserControl1()
        {
            InitializeComponent();
            this.DokumentBrowser.ItemsSource = listDirectory(SetRootPath);
        }

когда я его вызываю, и я пытаюсь установить для свойства SetRootPath локальный путь

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

Variabel SetRootPath всегда нулевой, и я получаю исключение, потому что ничего не назначено. Так почему же свойство никогда не устанавливается со значением, которое я назначаю?

привет

Ответы [ 2 ]

2 голосов
/ 06 сентября 2010

Анализатор XAML сначала создает пользовательский элемент управления, а затем устанавливает свойство SetRootPath. Следовательно, SetRootPath является нулевым в конструкторе UserControl1. Вы должны переместить линию

 this.DokumentBrowser.ItemsSource = listDirectory(SetRootPath); 

к более позднему этапу жизненного цикла UserControl1. Или вместо этого используйте свойство зависимости и напишите обработчик OnPropertyChanged. (См. http://msdn.microsoft.com/en-us/library/ms752914.aspx).

1 голос
/ 06 сентября 2010

Вы получаете доступ к SetRootPath в конструкторе. На тот момент у XAML еще не было возможности установить вашу собственность, поэтому она все еще null. Попробуйте установить ItemsSource вашего DocumentBrowser позже в жизненном цикле UserControl. Хорошим выбором будет сеттер SetRootPath.

(На самом деле, есть еще несколько «WPF-подобных» вариантов для этого:

Вариант A: сделать SetRootPath свойством зависимости и изменить DocumentBrowser.ItemsSource во время обратного вызова PropertyChanged.

Опция B: Как и Опция A, но не обрабатывать PropertyChanged. Вместо этого свяжите свойство ItemsSource DocumentBrowser со своим свойством SetRootPath, используя конвертер, который применяет listDirectory.)

PS: я бы назвал это RootPath, а не SetRootPath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...