Миксины поддерживают вложение, если вы включаете оператор block
.
Mixin:
mixin table()
table(align='center', border='0', cellpadding='0', cellspacing='0', width='100%')
if block
block
Использование:
+table()
tr
td text
Результат:
[112 ]Причина в том, что система привязки в WPF является «интеллектуальной», и когда вы меняете значение в TextBox, она предполагает, что событие PropertyChanged запускается для этого свойства, и игнорирует его.
Вы можете заставить TextBox обновить свои привязки, вызвав:
textBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
, но трудность заключается в том, чтобы найти хорошее место для этого. Очевидно, ваш объект данных не может этого сделать, поскольку он не имеет ссылки на экземпляр TextBox. Вы можете сделать это в окне, содержащем TextBox, связав его с обработчиком события PropertyChanged объекта данных, но это не кажется очень чистым.
Я отредактирую этот ответ, если придумаю лучшее решение, но, по крайней мере, это объясняет причину того, что привязка не работает.
Ага! Изменение привязки к IsAsync = true:
Вы реализовали 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));
}
}