我是WPF应用程序的新手,也是c#的新手。我会解释一下我的情况:
我有一个名为myObject
的类,它有一个Image
类型的图像实例变量
在运行时,我想得到image
的对象引用,如:
myObject obj = new myObject();
Image img = obj.getImage();//reference to obj's image variable;
现在来自img
我希望获得对象obj
的参考。我怎么得到这个?
编辑:以下是解决方案。
专家!首先,谢谢你们所有的帮助!我真的很感激!你们全都摇滚!
按照 Noob.net 的建议,每当我创建myObject obj时,我都会将obj引用存储在 img.Tag 属性中!
myObject obj = new myObject();
img.MouseLeftButtonDown += new MouseButtonEventHandler(img_MouseLeftButtonDown);
Image img = obj.getImage();
处理程序部分:
Image i = (Image)sender;
myObject otemp = (myObject)i.Tag;// refers to the same object from which img was created
答案 0 :(得分:2)
您可以直接执行此操作的唯一方法是,如果您的Image
类型具有对其所有者对象的引用。如果你在谈论.NET内置的Image
类型,那么就没有这样的属性。
您必须采取措施将每个Image
的父对象记录在以后可以返回的其他位置。一种常见的模式是在内存中维护HashTable
,其中Image
对象是键,MyObject
对象是值。
答案 1 :(得分:2)
如果您按照建议将Image
和myObject
放在一起Dictionary
,那么您将度过一段美好时光。您的图像将与字典一样长,并且可能不会及时处理。
那么为什么在构建数据以默认跟踪引用时使用数据结构跟踪此映射?
如果你在View Model中包装地图,你就会明白我的意思:
public class MyObjectViewModel : INotifyPropertyChanged
{
private myObject obj;
public Image Image
{
get;
private set;
}
public MyObjectViewModel(myObject obj)
{
this.obj = obj;
this.Image = obj.getImage();
}
public void SomethingThatMakesImageChange()
{
this.Image = obj.getImage();
this.RaisePropertyChanged("Image");
}
// ... insert suitable INPC implementation ...
}
这种方法有两个明显的优点:
Image
类只会在视图中生存所需的时间myObject
个实例的实时更改,您可以使用视图模型相应地处理这些更改和Image
的更新。答案 2 :(得分:2)
您可以使用Tag属性存储有关Image实例的其他信息
答案 3 :(得分:0)
您的Image
类必须拥有一个Parent
属性,该属性包含对myObject
实例的引用。然后,您必须确保在myObject
上设置图像时设置Parent
属性。
现在,如果您不能或不会向Parent
类添加Image
属性,那么您唯一的选择就是将myObject
的实例与{{ 1}}查看Image
是否包含它。如果你有一个myObject
的集合,那么对于Linq来说这很容易,但性能可能不是很好。
答案 4 :(得分:0)
我想我不明白,但这里是我的回答:
public class MyObject
{
private Image img;
public Image Img
{
get { return img; }
set { img = value; }
}
public MyObject()
{
Img = Image.FromFile("");
}
}
public class Main
{
MyObject obj = new MyObject();
//obj.Img = Image.FromFile(""); //if u want
Image image = obj.Img;
}