【发布时间】:2011-06-27 01:19:20
【问题描述】:
我正在尝试将 ChildWindow Height 属性绑定到我的 viewmodel 属性,但我认为它仅在首次加载时读取 VM 值,并且在 VM 更改并通知更改时不会更改大小。在调试器中,我看到它进入 Height getter 一次,进一步的通知不会改变 ChildWindow 的大小..
我认为它应该是可绑定的,所以我想知道这里是否存在一些问题或者我做错了什么?
听起来像是一次性绑定,但它是单向的..
Height="{Binding WindowHeight,Mode=OneWay}"
进一步调查表明,当我们将绑定更改为Mode=TwoWay 并添加一个空设置器时,它开始按预期运行。但这并不能解释 OneWay 绑定不起作用的原因。传递给 setter 的值也等于我的整个应用程序高度,而不仅仅是显然应该更小的子窗口。
整个情况最奇怪的是:
这个值也被传递给setter 每次调用 getter 后连续 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 个文本字符串,它们都不会以任何方式影响高度。
关于 WindowHeight 的通知不是由 WindowHeight 属性触发的(如代码所示),它由 Mode 属性触发。可能是一个围绕模式的转换器,但它目前以这种方式实现,因为我不确定在这种情况下具有几个魔法值的特殊转换器是一种更好的方法。
好的。模式设置器代码:
public bool IsSpecialMode
{
get { return m_IsSpecialMode; }
set
{
if (m_IsSpecialMode!= value)
{
m_IsSpecialMode= value;
NotifyPropertyChanged("IsSpecialMode");
NotifyPropertyChanged("WindowHeight");
}
}
}
【问题讨论】:
-
如果绑定中断,您应该检查 Visual Studio 中的“输出”窗口以获取更多信息
-
@HiTech Magic:+1 此刻难倒我。删除我的答案不够有用。如果我发现对你更有用的东西会重新发布。
标签: c# silverlight silverlight-4.0