WPF用户控件不更新代码隐藏值

时间:2014-01-01 20:17:23

标签: c# wpf

我意识到这个问题听起来有点奇怪,所以我会尽力解释。

我有一个用户控件,基本上是可以添加点的线,它根据数据绘制贝塞尔曲线,加上两个文本框,用于输入曲线的最小值和最大值。在调试用户控件本身时,一切似乎都在工作状态,所以我将项目导入到我正在处理的应用程序中。它完美显示,可见性切换工作(绑定到布尔值的复选框),上下文菜单功能无缝工作。唯一的问题是,在代码隐藏中,似乎没有任何改变。

如果我创建用户控件,然后在GUI中创建五个点并通过复选框隐藏它,如果我从代码隐藏(即UserControl.PointCollection)访问布尔值或点集合,则集合仅返回两个默认点,位于控件初始化时的位置。我知道我需要一个绑定来获得在GUI上出现的代码隐藏更改,是否有类似的要求GUI更改反映在代码中?我来自表格背景,这对我没有任何意义。

编辑:添加一些示例代码以帮助澄清

简化的示例对象:

namespace NodeViewHelper
{
    public partial class TimelineNodeControl : UserControl
    {
        public int Maximum;

        public TimelineNodeControl()
        {
        InitializeComponent();
        this.Maximum=100;
        }
        public void increaseMax(){
            this.Maximum++;
        }
     }
}

然后,该对象在XAML中被另一个对象多次实例化,作为模板的一部分

<myClass:TimelineNodeControl/>

无论调用maximumMax多少次,当我尝试访问parent.TimelineNodeControl.Maximum时,我得到100。

1 个答案:

答案 0 :(得分:0)

感谢您的帮助(尽管由于某种原因只能看到一条评论)。正如Rachel所说,问题在于DataTemplate无法通过代码隐藏直接访问。我决定将TimelineNodeControl的唯一ID绑定到其父级(模型的)UID,然后在可视化树中搜索具有相同uid的TNC以直接访问TNC以及所有包含的变量。不得不经历地狱把模型变成DependencyObject,这是我最后一次修改别人的控件......