なぜ私のSystem.Windows.Data.BindingがDependencyPropertyで失敗するのですか?

私は私のオブジェクト(短いバージョン)のための次のコードを得た:

public class PluginClass
{
    public int MyInt
    {
        get;
        set;
    }

    public PluginClass()
    {
        Random random = new Random();
        System.Timers.Timer aTimer = new System.Timers.Timer();
        aTimer.Elapsed += (sender, e) =>
        {
            MyInt = random.Next(0, 100);
        }
    }
}

次に、DependencyPropertyとしてintを持つ別のクラスを作成します。ここにコード(簡略版もあります)

public class MyClass : FramewまたはkElement
{
    public int Value
    {
        get
        {
            return GetValue(ValueProperty);
        }
        set
        {
            SetValue(ValueProperty, value);
        }
    }

    public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value", typeof(int), typeof(MyClass ), new PropertyMetadata(0));

    public MyClass(object source, string propertyName)
    {
        var b = new System.Windows.Data.Binding();
        b.Source = source;
        b.Path = new PropertyPath(propertyName);
        b.Mode = System.Windows.Data.BindingMode.TwoWay;

        SetBinding(ValueProperty, b);
    }
}

最後にPluginClassのインスタンスを作成しています。MyIntの値をMyClassのintにバインドしたいと思います。ここに私が得たものがあります(簡略版もあります)

PluginClass pc = new PluginClass();
MyClass mc = new MyClass(pc, "MyInt");

コンパイルに問題はありませんが、バインディングは有効ではありません。 要約すると、私は理論的に得なければならないかどうかわからない:

binding.Source = PluginClass.MyInt;
binding.Path = new PropertyPath("???");//don't know what to "ask"

または

binding.Source = PluginClass;
binding.Path = new PropertyPath("MyInt");

I think the 2nd way is the good one but I don't know why it doesn't wまたはk :( Any help will be very appreciated !

1

1 答え

あなたの PluginClass は、 INotifyPropertyChanged 。今のところ、バインディングでは MyInt の値が変更されたことはわかりません。

INPCを実装すると、値が変更されたときにクラスにバインディングを通知できます( MyInt の設定関数で PropertyChanged を呼び出す必要があります)。

1
追加された
私はそれについて考えていたが、それは別のものだと結論づけた!それは試してみる:)
追加された 著者 Guillaume Slashy,
あなたは正しかった。
追加された 著者 Guillaume Slashy,