C#WPF UserControl设置了一个属性

时间:2010-09-06 17:53:54

标签: c# wpf user-controls

您好我已经制作了自己的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,我得到一个例外,因为没有分配任何内容。那么为什么财产从未设置我指定的价值?

问候

2 个答案:

答案 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