2

我是 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
4

5 回答 5

2

如果您按照建议将ImagemyObject放在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 ...
}

这种方法有两个明显的优点:

  1. 您的视图模型通常只存在与您的模型一样长的时间,这意味着重Image类只会在视图中存在必要的时间
  2. 如果您需要适应myObject实例的实时更改,您可以使用您的视图模型来处理这些更改并Image相应地更新。
于 2013-03-11T21:05:42.863 回答
2

您可以直接执行此操作的唯一方法是,如果您的Image类型具有对其所有者对象的引用。如果您谈论的是Image.NET 中内置的类型,那么就没有这样的属性。

您将不得不采取措施将每个对象的父对象记录在Image其他地方,以便以后再返回。HashTable一种常见的模式是在内存中维护一个Image对象是键,MyObject对象是值。

于 2013-03-11T20:57:48.260 回答
2

您可以使用 Tag 属性来存储有关您的 Image 实例的其他信息

于 2013-03-11T21:07:29.500 回答
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;
}
于 2013-03-11T21:09:02.763 回答
0

您的Image类必须有一个Parent属性来保存对您的myObject实例的引用。然后,您必须确保在设置图像时myObject设置Parent属性。

现在,如果您不能或不会将Parent属性添加到Image类中,那么您唯一的选择是将 instance ofmyObject与 the进行比较Image以查看是否myObject包含它。如果你有 的集合myObject,那么使用 Linq 相当容易,但性能可能不是很好。

于 2013-03-11T20:56:48.743 回答