2010-09-06 16 views
0

Salut, j'ai fait mon propre UserControl, c'est un peu Windows Explorer.C# WPF UserControl définir une propriété

i défini une propriété dans le contrôle qui définit le chemin où l'explorateur doit partir indiquant le répertoire:

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

et im liant le TreeView que j'ai une méthode « listDirectory »

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

quand im appelant et je tente de définir la propriété SetRootPath à un chemin local

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

le Variabel SetRootPath est à chaque fois nul et j'obtiens une exception car rien n'est assigné. Alors, pourquoi la propriété n'est-elle jamais définie avec la valeur que j'attribue?

concernant

Répondre

1

Vous accédez à SetRootPath dans le constructeur. A ce moment-là, XAML n'a pas encore eu la chance de configurer votre propriété, donc c'est toujours null. Essayez de définir le ItemsSource de votre DocumentBrowser à un moment ultérieur dans le cycle de vie UserControl. Un bon choix serait le setter de SetRootPath.

(En fait, il y a quelques options "WPF-like" pour ce faire:

Option A: Faire SetRootPath une propriété de dépendance et changement DocumentBrowser.ItemsSource lors de son rappel PropertyChanged

Option. B: Comme l'option a, mais ne gère pas PropertyChanged au lieu de cela, lier la propriété ItemsSource du DocumentBrowser à votre propriété SetRootPath, en utilisant un convertisseur qui applique listDirectory)

PS:.. Je l'appellerais RootPath, pas SetRootPath

+0

Merci! mettre à un état ultérieur et cela a bien fonctionné. qu'avec les propriétés de dépendance je devrais lire quelque chose à ce sujet. Im vraiment nouveau avec ce genre de choses et obtenir chaque jour des tonnes de nouvelles impressions. – Mark

2

L'analyseur XAML construit d'abord le contrôle utilisateur, puis définit la propriété SetRootPath. Par conséquent, SetRootPath est null dans le constructeur de UserControl1. Vous devez déplacer la ligne

this.DokumentBrowser.ItemsSource = listDirectory(SetRootPath); 

à un point ultérieur dans le cycle de vie de UserControl1. Ou utilisez plutôt une propriété de dépendance et écrivez un gestionnaire OnPropertyChanged. (Voir http://msdn.microsoft.com/en-us/library/ms752914.aspx).

+0

+1 pour le lien MSDN. – Heinzi

+0

Merci pour une explication concise. A m'a aidé à résoudre mon problème très noob. – dex3703

Questions connexes