Я пытаюсь привязать свойство ChildWindow Height
к своему свойству viewmodel, но я думаю, что оно считывает только значение VM при первой загрузке и не меняет размер при изменении VM и уведомляет об этом изменении.В отладчике я вижу, что он попадает в блок получения высоты один раз, дальнейшие уведомления не изменяют размер ChildWindow ..
Я думаю, что он должен быть привязываемым, поэтому мне интересно, существует ли здесь какая-то проблема или я делаю какую-то ошибку?
Звучит как одноразовая привязка, но ее односторонний характер.
Height="{Binding WindowHeight,Mode=OneWay}"
Дальнейшие исследования показывают, что когда мы изменяем привязку на Mode=TwoWay
и добавляем пустой установщик, она начинает вести себя как ожидалось.Но это не объясняет причину, по которой привязка OneWay не работает.Также значение, которое передается в setter, равно всей высоте моего приложения, а не только дочернему окну, которое, очевидно, должно быть меньше.
Самое странное в этой ситуации - следующее:
Также это значение передается установщику 4 каждый раз подряд после вызова метода получения (см. count++
, который используется для подсчета этого).
Это срабатываетперед тем, как фактически отображается диалоговое окно, и оно всегда идет в последовательности get,set,set,set,set
Код для модели представления очень прост.Нигде в коде никто не использует ChildWindow Height, он установлен только в привязке xaml, как показано выше.
private int count = 0;
public int WindowHeight
{
get { return IsDefaultMode? DEFAULT_HEIGHT : SPECIAL_HEIGHT; }
set {count++; }
}
Мой наследующий класс Childwindow содержит примерно 5 строк текста, ни одна из которых никак не влияет на Height.
Уведомление о WindowHeight не вызывается свойством WindowHeight (как видно из кода), его запускает свойство Mode.Возможно, это был конвертерный режим, но в настоящее время он реализован таким образом, потому что я не уверен, что лучше использовать специальный конвертер с парой магических значений для этой ситуации.
oks.код установщика режима:
public bool IsSpecialMode
{
get { return m_IsSpecialMode; }
set
{
if (m_IsSpecialMode!= value)
{
m_IsSpecialMode= value;
NotifyPropertyChanged("IsSpecialMode");
NotifyPropertyChanged("WindowHeight");
}
}
}