繁体   English   中英

C#WPF UserControl设置属性

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM