首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >银光ChildWindow尺寸绑定

银光ChildWindow尺寸绑定
EN

Stack Overflow用户
提问于 2011-06-27 01:19:20
回答 1查看 1.9K关注 0票数 3

我试图将ChildWindow Height属性绑定到viewmodel属性,但我认为它只在第一次加载时读取VM值,并且在VM更改时不会更改大小&通知更改。在调试器中,我看到它一旦进入高度getter,进一步的通知不会更改ChildWindow大小。

我认为它应该是可绑定的,所以我想知道这里是否存在一些问题,还是我做错了什么?

听起来像是一次绑定,但它的单向..。

代码语言:javascript
复制
Height="{Binding WindowHeight,Mode=OneWay}" 

进一步的研究表明,当我们更改绑定到Mode=TwoWay并添加一个空的setter时,它开始按照预期的方式运行。但这并不能解释为什么OneWay绑定不能工作。传递给setter的值也等于我的整个应用程序高度,而不仅仅是明显应该更小的子窗口。

在这种情况下,最奇怪的是:

还会在调用getter之后,每次都将此值连续传递给setter 4 (参见用于计数该值的count++ )。

它是在实际显示对话框之前触发的,并且总是按照get,set,set,set,set顺序进行。

视图模型的代码非常简单。在代码中,没有人使用ChildWindow高度,它仅在xaml绑定中设置,如上面所示。

代码语言:javascript
复制
    private int count = 0;
    public int WindowHeight
    {
        get { return IsDefaultMode? DEFAULT_HEIGHT : SPECIAL_HEIGHT; }
        set {count++; }
    }

我的“继承儿童窗口”类包含5个文本字符串,它们中没有任何一个以任何方式影响高度。

有关WindowHeight的通知不是由WindowHeight属性(如代码中所示)触发的,而是由Mode属性触发的。本可以是一个转换模式,但它目前的实现方式,因为我不确定一个特殊的转换器具有两个神奇的值,在这种情况下是一个更好的方法。

好的。模式设置程序代码:

代码语言:javascript
复制
public bool IsSpecialMode
        {
            get { return m_IsSpecialMode; }
            set
            {
                if (m_IsSpecialMode!= value) 
                {
                    m_IsSpecialMode= value;
                    NotifyPropertyChanged("IsSpecialMode");
                    NotifyPropertyChanged("WindowHeight");
                }
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-27 01:52:10

如果ChildWindow或任何其他对象更改“高度”属性,则您的绑定将丢失。尝试将其设置为TwoWay绑定,并在视图模型的WindowHeight属性的设置器中设置一个断点。这将告诉您设置它的内容,以及是否可以使用OneWay绑定。

ChildWindow类实际上将设置它自己的高度和宽度属性。例如,下面的代码确保ChildWindow始终覆盖应用程序的根内容。这允许ChildWindow在显示其弹出时提供覆盖效果或褪色效果:

代码语言:javascript
复制
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
    }
}

因此,如果效果良好,您就不能在高度或宽度属性上使用OneWay绑定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6487831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档