假设我有几个用户控件,如:
uc1,uc2
uc2在xaml中包含uc1
<my:uc1 x:Name = "myuc1" />
然后在一个新的usercontrol代码后面,我想创建uc2的实例并访问uc1,如:
uc2 mycontrol = new uc2();
uc2.myuc1.DataContext = myViewModel;
....
我收到错误,因为myuc1在后面的代码中无法访问,但我可以在后面的uc2代码中访问myuc1!不知道为什么。
错误消息说: uc2不包含'myuc1'的定义
如何解决这个问题?
答案 0 :(得分:0)
你不应该访问变量的myuc1而不是类型吗?
例如:
uc2 mycontrol = new uc2();
mycontrol.myuc1.DataContext = myViewModel;
答案 1 :(得分:0)
这是因为uc2包含uc1。因此,myuc1可以在uc2中进行访问,因为它将被编译为私有字段。如果你真的想让这个实例公开 - 在uc2中创建属性。 E.g。
public uc1 MyUC1 {get {return myuc1}}
答案 2 :(得分:0)
我能想到你的代码无法工作的唯一原因是因为你的新用户控件与uc1和uc2控件位于不同的项目中。表示命名控件的字段具有内部可访问性,因此不可用于其他项目。
在我看来,不将这些字段设为私有不是一个好的选择,实际上动态创建字段并不好。历史VB6 / VBA的形式对我形成了。
我建议你为uc2添加适当的属性和方法来操作uc1而不是允许外部代码直接使用uc1。
如果由于某种原因您不能采取这种方法,请考虑在公共财产中放置对控件的包装访问权限。还要考虑创建一个uc1可以实现的接口,其中包含您想要访问的所有方法和属性,使该公共属性返回该接口而不是uc1类型。