我想将ChildWindow Height
属性绑定到我的viewmodel属性,但我认为它只在第一次加载时读取VM值,并且在虚拟机更改&通知有关更改时不会更改大小。在调试器中,我发现它一旦进入Height getter,进一步的通知不会改变ChildWindow的大小。Silverlight ChildWindow Size binding
我认为它应该是可绑定的,所以我想知道这里是否存在某个问题或者我犯了一些错误?
听起来像是一次约束力,但它的单向..
Height="{Binding WindowHeight,Mode=OneWay}"
进一步的研究表明,当我们改变结合Mode=TwoWay
,并添加一个空的二传手它开始像预期的那样。但是这并不能解释OneWay绑定不起作用的原因。同样,传递给setter的值等于我的整个应用程序高度,而不仅仅是显然应该更小的childwindow。
这整个情况的最奇怪的是以下几点:
而且这个值传给每次设定器 连续四次调用getter时后(见
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");
}
}
}
如果绑定正在中断,您应该在Visual Studio中检查您的“输出”窗口以获取更多信息 – Rumplin
@HiTech Magic:此刻用于锁定我的+1。删除我的答案,因为没有足够的帮助。如果我找到对你更有用的东西,我会重新发布。 –