2011-07-10 3 views
1

Please Checkout this PictutePourquoi ne pas mettre à jour textblock mise à jour tandis que la source s `

public class Person : INotifyPropertyChanged 
{ 

    private string name; 
    // Declare the event 
    public event PropertyChangedEventHandler PropertyChanged; 
    public Person() 
    { 
    } 
    public string newPerson(string Value) 
    { 
     this.Name = Value; 
     return ""; 
    } 
    public Person(string value) 
    { 

     this.name = value; 

    } 
    public string Name 
    { 

     get { return name; } 

     set 
     { 

      name = value; 

      // Call OnPropertyChanged whenever the property is updated 

      OnPropertyChanged("Name"); 

     } 

    } 
    // Create the OnPropertyChanged method to raise the event 

    protected void OnPropertyChanged(string name) 
    { 

     PropertyChangedEventHandler handler = PropertyChanged; 

     if (handler != null) 
     { 

      handler(this, new PropertyChangedEventArgs(name)); 

     } 

    } 

. XAML:

<Window.Resources> 
    <local:Person x:Key="NewPerson" Name="shuvo"/> 
    <ObjectDataProvider x:Key="AddNewPerson" ObjectType="{x:Type local:Person}" MethodName="newPerson"> 
     <ObjectDataProvider.MethodParameters> 
      <sys:String>yahoo</sys:String> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 
</Window.Resources> 
<Grid> 
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="46,57,0,0" Name="textBlock1" Text="{Binding Source={StaticResource NewPerson},Path=Name}" VerticalAlignment="Top" Width="207" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="46,149,0,0" Name="textBox1" VerticalAlignment="Top" Width="234" Text="{Binding Source={StaticResource AddNewPerson}, Path=MethodParameters[0],BindsDirectlyToSource=True,Mode=OneWayToSource,UpdateSourceTrigger=PropertyChanged}" /> 
</Grid> 

Répondre

1

Le ObjectDataProvider crée une nouvelle instance de la classe personne puis appeler la méthode newPerson de cette nouvelle instance. Cette nouvelle instance n'est pas connectée à l'instance Personne déjà existante que vous avez déclarée dans les ressources de la fenêtre en tant que NewPerson. Par conséquent le fournisseur de données d'objet appelle une méthode qui n'a aucun effet.

Vous devriez mofify le ObjectDataProvider à utiliser la ObjectInstance propriété et le lier aux ressources Windows définies NewPerson. Voir here pour plus d'informations.

Questions connexes