2010-09-06 115 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

相关问题