C# 从自定义控件中强制更新属性
我有一个基于C# 从自定义控件中强制更新属性,c#,wpf,xaml,custom-controls,C#,Wpf,Xaml,Custom Controls,我有一个基于RangeBase的自定义控件。在控件中,我显示了值的格式化版本,如下所示: <Label Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:NumericUpDownControl}}, Path=FormattedValue}" /> public string FormattedValue { get { ret
RangeBase
的自定义控件。在控件中,我显示了值的格式化版本,如下所示:
<Label Content="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type local:NumericUpDownControl}}, Path=FormattedValue}" />
public string FormattedValue
{
get { return Value.ToString(_format); }
}
这一切似乎都很好。但是,在控件中,有一个按钮可增加值的值
:
private void myButton_Click(object sender, RoutedEventArgs e)
{
Value += 0.5;
}
我遇到的问题是FormattedValue从未更新。我想象我需要类似于RaisePropertyChanged
的东西,但要在控制范围内。我尝试向FormattedValue
添加一个虚拟集,但没有效果。如何在屏幕上更新此值?您当前的问题是,您设置了“value”属性value+=0.5代码>但您正在绑定到“FormattedValue”属性。因此,您在“Value”属性的Setter中为“FormattedValue”属性引发一个“PropertyChanged”,您的代码应该可以按需要工作
编辑
使用不必要的附加属性(“FormattedValue”)的更好方法是使用标签的ContentStringFormat属性。为什么不能将FormattedValue作为依赖属性?这不会导致FormattedValue
在控件之外可用吗?我不想这样。另外,对于下一个投票人:为什么?\u format
字段会改变吗?然后直接绑定到值
,并通过标签的ContentStringFormat
属性进行格式化。更好的方法是使用文本块而不是标签,并设置绑定的StringFormat
。