我已经创建了一个像这样的对象:
public class Widget : INotifyPropertyChanged {
int miValue;
public int Value {
get => miValue;
set {
miValue = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value");
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
现在,我还创建了一个用户控件,该控件具有一系列文本框,这些文本框绑定到该用户控件的属性:
public StatBlock ( ) {
InitializeComponent( );
DataContext = this;
}
public int Points {
get => ( int )GetValue( PointsProperty );
set => SetValue( PointsProperty, value );
}
public static readonly DependencyProperty PointsProperty = DependencyProperty.Register("Points", typeof(int), typeof(StatBlock), new PropertyMetadata(0));
}
如果在窗口中使用此UserControl,则可以为Points
属性分配静态值,并且一切正常。但是,如果我绑定到对象,那么它将无法正常工作。为了进行测试,我执行了以下操作:
<Window.Resources>
<local:Widget x:Key="test" value="150"/>
</Window.Resources>
<Grid DataContext="{StaticResource test}">
<local:StatBlock Points="{Binding Value}" Width="65" Height="65"/>
<TextBox Width="150" Height="35" HorizontalAlignment="Left" Text="{Binding Value}"/>
</Grid>
即使我们看到该值是150,这也只会在我的用户控件中返回值0。实际上,标准TextBox
中的值是正确的。我错过了什么?谢谢。