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