也许我的问题完全是愚蠢的,但我正努力做到最好。
我想要做的就是使用父元素的函数/属性。
我准备了一个没有意义的简单例子:
class A
{
public List<B> myBs = new List<B>();
public int CountMyBs()
{
return myBs.Count;
}
}
class B
{
//here i would like to use "CountMyBs()"
}
谢谢!
编辑:我想我必须提供更多信息。
我的用户可以将值拖到画布上。 我的画布位于父类的列表中。 现在我的画布想知道列表中的任何其他画布是否已经具有相同的值。
我想要实现:
用户进行拖动 - &gt;画布获得一个事件 - &gt;如果任何其他Canvas已经具有相同的值,Canvas会询问父类 - &gt;决定做什么。
明天我将发布详细的例子!
答案 0 :(得分:1)
你需要这样的东西:
class A : FrameworkElement
{
public int CountMyBs() {}
}
class B : FrameworkElement
{
public void Foo()
{
var parent = LogicalTreeHelper.GetParent(this) as A;
if (parent != null)
{
//here i would like to use "CountMyBs()"
parent.CountMyBs();
}
}
}
答案 1 :(得分:0)
您可以通过B:
的构造函数传递A的实例class B
{
private readonly A a;
public B(A a)
{
this.a = a;
}
public int Foo() //Example use
{
return 1 + a.CountMyBs();
}
}
class A
{
public List<B> myBs = new List<B>();
public A()
{
myBs.Add(new B(this)); //Pass the current A to B
}
public int CountMyBs()
{
return myBs.Count;
}
}
但它看起来像是一个糟糕的代码味道。除非你有一个非常具体的用例,否则我要避免让一个子类知道它的父类只能访问它自己的列表。
您只需使用方法结果作为参数,即可从B
拨打A
。感觉更自然。它可能看起来像:
class A
{
public List<B> myBs = new List<B>();
public A()
{
var someB = new B();
myBs.Add(someB);
someB.Foo(CountMyBs());
}
public int CountMyBs()
{
return myBs.Count;
}
}
class B
{
public int Foo(int count) //Example use
{
return 1 + count;
}
}