在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;
在视图模型中。
另外,有一些奇怪的事情真的把我扔到了这里,我会在下面列出它们,这样就可以说明我在这里搞砸了什么。
在窗口后面的代码中,我可以像这样设置SetPointValue依赖属性,并且可以像我期望的那样在setter中触发业务逻辑。
flowUC.SetPointValue =((LrsVM)this.DataContext).FlowSetPointValue;