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

Tagプロパティを使用して、Imageインスタンスに関する追加情報を保存できます

于 2013-03-11T21:07:29.500 に答える
2

これを直接行うことができる唯一の方法は、Imageタイプにその所有者オブジェクトへの参照がある場合です。Image.NETに組み込まれているタイプについて話している場合、そのようなプロパティはありません。

Image後で戻ることができる別の場所にそれぞれの親オブジェクトを記録するための手順を実行する必要があります。一般的なパターンの1つは、オブジェクトがキーでオブジェクトが値HashTableであるメモリ内にを維持することです。ImageMyObject

于 2013-03-11T20:57:48.260 に答える
2

アドバイスに従ってまとめるImagemyObjectDictionary悪い時間を過ごすことになります。あなたの画像は辞書が存続する限り存続し、おそらくタイムリーに処分されることはありません。

では、デフォルトで参照を追跡するようにデータを構造化できるのに、なぜデータ構造を使用してこのマッピングを追跡するのでしょうか。

マッピングをビューモデルでラップすると、私を意味するかがわかります。

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 ...
}

このアプローチには、2つの明確な利点があります。

  1. ビューモデルは通常、モデルが存続する期間のみ存続します。つまり、ヘビーImageクラスはビューで必要な期間のみ存続します。
  2. インスタンスへのリアルタイムの変更に適応する必要がある場合myObjectは、ビューモデルを使用して、これらの変更とImageそれに応じた更新を処理できます。
于 2013-03-11T21:05:42.863 に答える
0

クラスImageには、インスタンスParentへの参照を保持するプロパティが必要です。myObject次に、その上に画像を設定するときにmyObjectParentプロパティを設定することを確認する必要があります。

Parentこれで、クラスにプロパティを追加できない、または追加しない場合Image、唯一のオプションは、のインスタンスをmyObjectと比較して、プロパティが含まれているImageかどうかを確認することです。myObjectのコレクションがある場合myObject、これはLinqを使用するとかなり簡単ですが、パフォーマンスはあまり良くない可能性があります。

于 2013-03-11T20:56:48.743 に答える
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 に答える