0

WPF には、処理のためにプロパティを渡す多くのクラスがあります。例: ValueConverters、RuleValidations など。プロパティを正しい型にキャストして使用します。

しかし、計算や値の比較などのために、特定のオブジェクトの他のプロパティが必要になることがよくあります。

インスタンスオブジェクトに到達するためだけに、オブジェクト全体をパラメーターとして渡すなど、醜いものを試していた最後のビューの日。

独自のプロパティの 1 つからオブジェクトにアクセスする方法が必要ですか?

どうすればそれについて行くでしょうか?

たとえば、このコードでは:

public class Car
{
    public string Brand { get; set; }
    public string Color { get; set; }
}

class Program
{
    public static void Main(string[] args)
    {
        Car car = new Car();

        car.Brand = "Porsche";
        car.Color = "Yellow";

        Test(car.Brand);
    }

    public static void Test(object value)
    {
        var brand = (String)value;

        // Get the Car object instance reference from the passed object?
        var carInstance = ...

            Console.WriteLine("This {0} has a {1} paint job",
                              brand, carInstance.Color);
    }
}
4

2 に答える 2

1

申し訳ありませんが、それは不可能です。String (そのブランド名) 値から Car インスタンスを取得することはできません。car.Brand はコード内のプロパティ (PropertyInfo など) ではなく、単なるString の値です。ただ想像する:

   // Test(car.Brand);
   String brandName = car.Brand; // <- Just a string, nothing special
   Test(brandName);

Reflection を使用しても Object instanceを取得できません。取得できるのは class(Type)だけです。

  PropertyInfo pi = typeof(Car).GetProperty("Brand");
  ...
  Type tp = pi.ReflectedType; // <- Car; Type only, not instance

代わりに、 Car インスタンスを渡して、必要なすべてのプロパティを取得できます。

public static void Main(string[] args)
{
    Car car = new Car();

    car.Brand = "Porsche";
    car.Color = "Yellow";

    Test(car);
}

public static void Test(Car value)
{
   Console.WriteLine("This {0} has a {1} paint job", value.Brand, value.Color);
}
于 2013-08-04T06:32:39.680 に答える