2014-07-19 4 views
0

J'ai une question très simple concernant la propriété de dépendance et la liaison de données. J'ai créé un nom de classe simple TDTVm c'est ma classe ViewModel. Il a une propriété de dépendance bool appelée IsShaftMovingUp et sa valeur initiale est 'False' J'ai lié cette valeur à une zone de texte sur l'interface utilisateur. Maintenant, je veux montrer la valeur en temps réel de 'IsShaftMovingUp' sur l'écran.Propriété de dépendance WPF Liaison de données

Voici ma machine virtuelle.

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 
      { 
       return (bool)GetValue(TDTVm.ShaftMovingUpProperty); 
      } 
      set 
      { 
       SetValue(TDTVm.ShaftMovingUpProperty, value); 
      } 
     } 
    } 

Ci-dessous est mon code xamal.

 <Window x:Class="WpfApplication1.MainWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Title="MainWindow" Height="350" Width="525">  
     <Grid>  
      <Button Content="Button" HorizontalAlignment="Left" Margin="124,175,0,0" VerticalAlignment="Top" Width="74" Click="Button_Click"/> 
      <TextBox Text="{Binding IsShaftMovingUp, 
UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="22" Margin="96,244,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/> 
     </Grid> 
    </Window> 

et ci-dessous est mon code derrière:

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; 
    } 
} 

Lorsque je clique sur le bouton, je suis en train de valeur 'IsShaftMovingUp' true. Mais toujours sur l'interface utilisateur n'est pas mis à jour. (Je l'ai réalisé cela en utilisant INotifyPropertyChanged mais essayer même la propriété de dépendance à comprendre la différence exacte entre les deux)

Merci

Répondre

2

Pour résoudre votre problème, vous devez changer ce code

DependencyProperty.Register("ShaftMovingUp", 

dans

DependencyProperty.Register("IsShaftMovingUp", 

Vérifiez this post, si vous voulez connaître la différence entre INotifyPropertyChanged et propriété de dépendance.

Questions connexes