Значение изменения в свойстве метода set при использовании WPF двухсторонняя привязка данных

Миксины поддерживают вложение, если вы включаете оператор block.

Mixin:

mixin table()
  table(align='center', border='0', cellpadding='0', cellspacing='0', width='100%')
    if block
      block

Использование:

+table()
  tr
    td text

Результат:

[112 ]
5
задан Kenneth Kryger Sørensen 13 May 2009 в 10:06
поделиться

2 ответа

Причина в том, что система привязки в WPF является «интеллектуальной», и когда вы меняете значение в TextBox, она предполагает, что событие PropertyChanged запускается для этого свойства, и игнорирует его.

Вы можете заставить TextBox обновить свои привязки, вызвав:

textBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();

, но трудность заключается в том, чтобы найти хорошее место для этого. Очевидно, ваш объект данных не может этого сделать, поскольку он не имеет ссылки на экземпляр TextBox. Вы можете сделать это в окне, содержащем TextBox, связав его с обработчиком события PropertyChanged объекта данных, но это не кажется очень чистым.

Я отредактирую этот ответ, если придумаю лучшее решение, но, по крайней мере, это объясняет причину того, что привязка не работает.


Ага! Изменение привязки к IsAsync = true:

15
ответ дан 18 December 2019 в 12:01
поделиться

Вы реализовали INotifyPropertyChanged и вызвали его?

    private string _fraction;

    public string Fraction
    {
        get { return _fraction; }
        set
        {
            _fraction = ReduceFraction(value);
            NotifyPropertyChanged("Fraction");
        }
    }

    private string ReduceFraction(string value)
    {
        string result = "1/2";
        // Insert reduce fraction logic here
        return result;
    }


    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
0
ответ дан 18 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: