WPF依赖属性数据绑定

时间:2014-07-19 03:55:48

标签: wpf data-binding

我有关于依赖属性和数据绑定的非常基本的问题。我创建了一个简单的类名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实现了这一点,但是想尝试使用依赖属性来理解两者之间的确切差异)

由于

1 个答案:

答案 0 :(得分:2)

要解决您的问题,您需要更改此代码

DependencyProperty.Register("ShaftMovingUp",

DependencyProperty.Register("IsShaftMovingUp",

如果您想了解INotifyPropertyChanged和依赖属性之间的区别,请检查this post

相关问题