您好我已经制作了自己的UserControl,它是一个小型的Windows资源管理器。
我在Control中定义了一个属性,用于设置资源管理器应从列出目录开始的路径:
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每次都为null,我得到一个例外,因为没有分配任何内容。那么为什么财产从未设置我指定的价值?
问候
答案 0 :(得分:2)
XAML解析器首先构造用户控件,然后设置SetRootPath属性。因此,在UserControl1的构造函数中,SetRootPath为null。你应该移动
行 this.DokumentBrowser.ItemsSource = listDirectory(SetRootPath);
到UserControl1生命周期的后续点。或者使用依赖项属性,并编写OnPropertyChanged处理程序。 (见http://msdn.microsoft.com/en-us/library/ms752914.aspx)。
答案 1 :(得分:1)
您正在构造函数中访问SetRootPath
。那个时候,XAML还没有机会设置你的属性,所以它仍然是null
。尝试稍后在UserControl生命周期中设置DocumentBrowser的ItemsSource。一个很好的选择是SetRootPath
的设定者。
(事实上,还有一些类似“WPF”的选项:
选项A:使SetRootPath
成为依赖项属性,并在其PropertyChanged回调期间更改DocumentBrowser.ItemsSource。
选项B:与选项A类似,但不处理PropertyChanged。而是使用应用SetRootPath
的转换器将DocumentBrowser的ItemsSource属性绑定到listDirectory
属性。)
PS:我称之为RootPath
,而不是SetRootPath
。