Почему мой System.Windows.Data.Binding не работает с DependencyProperty? - PullRequest
1 голос
/ 25 ноября 2011

Я получил следующий код для моего объекта (короткая версия):

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);
        }
    }
}

Затем я создаю другой класс с int как DependencyProperty.Вот код (также упрощенная версия)

public class MyClass : FrameworkElement
{
    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 к int из MyClass.Вот что я получил (упрощенная версия)

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");

Я думаю, что 2-й способ хорош, но я не знаю почемуэто не работает :( Любая помощь будет очень ценится!

1 Ответ

1 голос
/ 25 ноября 2011

Ваш PluginClass должен реализовать INotifyPropertyChanged . На данный момент привязка не имеет представления, что значение MyInt изменилось.

Реализация INPC позволит вашему классу сообщать привязку при изменении значения (вам придется повысить PropertyChanged в вашей функции набора MyInt).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...