【问题标题】:DependencyProperties: PropertyChangedCallBack only called onceDependencyProperties:PropertyChangedCallBack 只调用一次
【发布时间】:2012-04-13 10:52:49
【问题描述】:

我创建了一个从Canvas 派生的控件,它应该绘制一个实时图表,给定通过绑定传递到 DependencyProperty 的值。简化版是这样的:

public class Plotter : Canvas
{
    public float Value { get { return (float)GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } }

    public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value", typeof(float), typeof(Plotter),
        new PropertyMetadata(0f, new PropertyChangedCallback(ValueChangedCallBack)));

    public static void ValueChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
    {
        Plotter plotter = (Plotter)property;
        plotter.Value = (float)args.NewValue; //<-- Removed this line to get it to work

        // Actually draw the value into the canvas geometry
        plotter.PlotValue(plotter.Value);
    }
}

我是这样绑定控件的:

<mystuff:Plotter Value="{Binding MyViewModelProperty}" Height="50" Width="200" />

我的 ViewModel 实现了INotifyPropertyChanged 并正确调用了PropertyChanged。如果我将MyViewModelProperty 绑定到文本框,它每次都会正确更新。只有当我将它绑定到我自己的控件时,我的ValueChangedCallBack 才会在页面加载时被调用一次,然后再也不会被调用。

我在这里没有看到什么?感谢您的帮助!

已解决:我不必在回调中显式设置Value

【问题讨论】:

    标签: c# silverlight events windows-phone-7 data-binding


    【解决方案1】:

    您在回调中设置属性值以更改属性值。无论如何,这没有多大意义。但是,本地设置的值是否会覆盖绑定值,导致您的绑定不再在依赖属性上设置?

    【讨论】:

    • 啊,这就是问题所在。非常感谢!我刚刚删除了明确设置Value 的行,现在它可以工作了!
    【解决方案2】:

    您需要将绑定的模式设置为双向吗?

    【讨论】:

    • 不,应该只是单向绑定。 ViewModel 吐出一个新值,应该通知我的控件并将其绘制到画布几何图形中。
    【解决方案3】:

    您不应该使用 DependencyProperty.Register 而不是 DependencyProperty.RegisterAttached 吗?

    【讨论】:

    • 哦,对不起,只是复制和粘贴错误。原来是DependencyProperty.Register。我改变了它,只是为了确定。它不适用于两个版本。
    • Nicholas W 的回答似乎是在正确的轨道上。删除 plotter.Value = (float)args.NewValue;从回调方法,一切都应该没问题。
    • 是的,这就是问题所在。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 2016-08-18
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多