我有关于依赖属性和数据绑定的非常基本的问题。我创建了一个简单的类名TDTVm,它是我的ViewModel类。它有一个名为IsShaftMovingUp的bool依赖属性,其初始值为' False'我已将此值绑定到UI上的一个文本框。现在我要展示“IsShaftMovingUp'的实时价值”。在屏幕上。
以下是我的虚拟机。
public class TDTVm : DependencyObject
{
public static DependencyProperty ShaftMovingUpProperty =
DependencyProperty.Register(
"ShaftMovingUp",
typeof(bool),
typeof(TDTVm),
new PropertyMetadata(false, ShaftMovingUpChanged));
private static void ShaftMovingUpChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Console.WriteLine("ok");
}
public bool IsShaftMovingUp
{
get => (bool)GetValue(TDTVm.ShaftMovingUpProperty);
set => SetValue(TDTVm.ShaftMovingUpProperty, value);
}
}
以下是我的xamal代码。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Button Content="Button" Click="Button_Click"/>
<TextBox Text="{Binding IsShaftMovingUp,
UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Window>
以下是我的代码:
public partial class MainWindow : Window
{
TDTVm datacontext = new TDTVm();
public MainWindow()
{
InitializeComponent();
this.DataContext = datacontext;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
///Even after this line 'true' value is not getting updated on UI.
datacontext.IsShaftMovingUp = true;
}
}
当我点击按钮时,我正在设置&#39; IsShaftMovingUp&#39;为真。但仍然在UI上它没有得到更新。 (我已经使用INotifyPropertyChanged实现了这一点,但是想尝试使用依赖属性来理解两者之间的确切差异)
由于
答案 0 :(得分:2)
要解决您的问题,您需要更改此代码
DependencyProperty.Register("ShaftMovingUp",
到
DependencyProperty.Register("IsShaftMovingUp",
如果您想了解INotifyPropertyChanged
和依赖属性之间的区别,请检查this post。