WPF DependencyProperty绑定问题

时间:2017-03-07 16:16:43

标签: c# wpf xaml dependency-properties

在WPF项目中,我有一个名为FlowControl.xaml的用户控件,它有一个名为SetPointValue的DependencyProperty。

public static DependencyProperty SetPointValueProperty =
    DependencyProperty.Register("SetPointValue", typeof(double), typeof(FlowControl), new PropertyMetadata(0d));

public double SetPointValue {
    get { return (double)GetValue(SetPointValueProperty); }
    set {
        SetValue(SetPointValueProperty, (double)value);

        CalcSetPointMargin();

        // Fire off any registered event handlers for the flow set point changing
        OnSetPointChanged?.Invoke(this, 
            new SetPointEventArgs(SetPointValue));
    }
}

您可以在上面的setter中看到,只要设置了SetPointvalue,就会出现一些业务逻辑。

我在这样的窗口中使用FlowControl:

<cl:FlowControl x:Name="flowUC" SetPointValue="{Binding DataContext.FlowSetPointValue, RelativeSource={RelativeSource AncestorType=Window}, Mode=TwoWay}" />

您可以在上面的代码中看到,我将SetPointValue DependencyProperty绑定到数据上下文中名为FlowSetPointValue的属性,该属性是一个名为LrsVM.cs的视图模型类。这是视图模型中的FlowSetPointValue。

private double _flowSetPointValue { get; set; }
public double FlowSetPointValue {
    get {
        return _flowSetPointValue;
    }
    set {
        _flowSetPointValue = value;
        OnPropertyChanged("FlowSetPointValue");
    }
}

基本上,我想在这里实现的是任何时候在视图模型中设置FlowSetPointValue属性然后我想要触发SetPointValue依赖属性的setter中的业务逻辑(前面提到)。问题是当我做类似的事情时,设置器中的业务逻辑没有触发 -

this.FlowSetPointValue = 200;

在视图模型中。

另外,有一些奇怪的事情真的把我扔到了这里,我会在下面列出它们,这样就可以说明我在这里搞砸了什么。

  1. 当我尝试在视图模型中设置FlowSetPointValue属性(如上所述)时,SetPointValue依赖项属性的setter中的业务逻辑未触发,正在设置SetPointValue依赖项属性的实际值设置!我可以看到它设置得很好,因为用户控件中有标签绑定到依赖属性并且它们正在显示它。换句话说,就像我上面的代码一样,如果我将FlowSetPointValue设置为200,那么它将在用户控件中显示为200,这告诉我SetPointValue依赖项属性确实正在使用该值进行更新。
  2. 在窗口后面的代码中,我可以像这样设置SetPointValue依赖属性,并且可以像我期望的那样在setter中触发业务逻辑。

    flowUC.SetPointValue =((LrsVM)this.DataContext).FlowSetPointValue;

0 个答案:

没有答案