Silverlight ChildWindow大小绑定
本文关键字:绑定 ChildWindow Silverlight | 更新日期: 2023-09-27 18:00:38
我正在尝试将ChildWindow Height
属性绑定到我的视图模型属性,但我认为它只在第一次加载时读取VM值,并且在VM更改时不会更改大小&通知更改。在调试器中,我看到它进入Height getter一次,进一步的通知不会改变ChildWindow的大小。。
我认为它应该是可绑定的,所以我想知道这里是否存在一些问题,或者我犯了一些错误?
听起来像是一次性的,但它是单向的。。
Height="{Binding WindowHeight,Mode=OneWay}"
进一步的研究表明,当我们将绑定更改为Mode=TwoWay
并添加一个空的setter时,它开始按预期运行。但这并不能解释单向绑定不起作用的原因。另外,传递给setter的值等于我的整个应用程序高度,而不仅仅是应该更小的子窗口。
整个情况下最奇怪的事情是:
此值也传递给setter每次调用getter后连续4次(请参阅用于对其进行计数的
count++
)。
它在对话框实际显示之前被激发,并且它总是按顺序get,set,set,set,set
进行
视图模型的代码非常简单。在代码中,任何地方都没有人使用ChildWindowHeight,它只是在其xaml绑定中设置的,如上所示。
private int count = 0;
public int WindowHeight
{
get { return IsDefaultMode? DEFAULT_HEIGHT : SPECIAL_HEIGHT; }
set {count++; }
}
我的继承Childwindow类包含大约5个文本字符串,它们都不会以任何方式影响Height。
关于WindowHeight的通知不是由WindowHeight属性触发的(如代码中所示),而是由Mode属性触发的。Couldve是一个环绕模式的转换器,但它目前是以这种方式实现的,因为我不确定在这种情况下使用具有几个神奇值的特殊转换器是更好的方法。
oks。模式设置器代码:
public bool IsSpecialMode
{
get { return m_IsSpecialMode; }
set
{
if (m_IsSpecialMode!= value)
{
m_IsSpecialMode= value;
NotifyPropertyChanged("IsSpecialMode");
NotifyPropertyChanged("WindowHeight");
}
}
}
如果ChildWindow或任何其他对象更改Height属性,则绑定将丢失。尝试将其设置为TwoWay
绑定,并在View模型的WindowHeight属性的setter中设置断点。这将告诉您设置它的内容以及是否可以使用OneWay
绑定。
ChildWindow类实际上会设置自己的Height和Width属性。例如,以下代码确保ChildWindow始终覆盖应用程序的根内容。这允许ChildWindow在显示弹出窗口时提供叠加或褪色效果:
private void UpdateOverlaySize()
{
if (((this.Overlay != null) && (Application.Current != null)) && ((Application.Current.Host != null) && (Application.Current.Host.Content != null)))
{
base.Height = Application.Current.Host.Content.ActualHeight;
base.Width = Application.Current.Host.Content.ActualWidth;
// ... other code removed
}
}
所以,如果效果,看起来你不能在"高度"或"宽度"属性上使用单向绑定。