Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
When does the bound data get updated?
Message
De
19/02/2013 13:43:33
John Baird
Coatesville, Pennsylvanie, États-Unis
 
 
À
19/02/2013 12:55:30
Information générale
Forum:
ASP.NET
Catégorie:
Windows Presentation Foundation (WPF)
Divers
Thread ID:
01566380
Message ID:
01566389
Vues:
50
>>>I have a textbox which is bound to a field on an entity. I need to run some code whenever the entity's field changes. I've tried calling my code in the textbox's Text_Changed event, but referring to the entity's field at this point in time does not reflect the value entered in the textbox.
>>>
>>>At what point in time would the entity's field get updated with the value entered in the textbox?
>>>
>>>Or is there another way to trap/raise an event when the entity's filed changes?
>>
>>Usually, the UI field is bound to a property that implements INotifyPropertyChanged. You can process your code changes there when the properties value changes. Or trap the PropertyChanged event in the UI and fire off your code there..
>
>Thanks John, but this is really all Greek to me at the moment.
>
>The form I am dealing with has:
>1. a field to enter the deposit amount
>2. A grid to enter the deposit details
>3. A textbox to show the total of the deposit details
>4. Another textbox to show the difference between the Deposit Amount and the total of the deposit details.
>
>I have this defined:
>
>
        private decimal depositTotal;
>        
>        public decimal DepositTotal
>        {
>            get
>            {
>                return this.depositTotal;
>            }
>
>            set
>            {
>                if (value != this.depositTotal)
>                {
>                    this.depositTotal = value;
>                    this.OnPropertyChanged("DepositTotal");
>                }
>            }
>        }
>
>        private decimal balanceOutstanding;
>
>        public decimal BalanceOutstanding
>        {
>            get
>            {
>                return this.balanceOutstanding;
>            }
>
>            set
>            {
>                if (value != this.balanceOutstanding)
>                {
>                    this.balanceOutstanding = value;
>                    this.OnPropertyChanged("BalanceOutstanding");
>                }
>            }
>        }
>
>I have the txtDepositTotal defined like this:
>
>
<TextBox Name="txtDepositTotal" Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DepositTotal}"/>
>
>and the txtBalanceOutstanding like this:
>
>
<TextBox  Name="txtBalanceOutstanding"Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=BalanceOutstanding}" />
>
>and the DepositAmount:
>
>
<TextBox  Text="{Binding dep_amount, Mode=Default}" 
>                                  Name="txtDep_Amount" 
>                                  VerticalAlignment="Center" />
>
>Can you give me an example showing what I should do?

When you set the value of DepositTotal = _value in the property defined above, that is the point when the on PropertyChyanged fires. You can either add a method call at that time, i.e.,
        public decimal DepositTotal
        {
            get
            {
                return this.depositTotal;
            }

            set
            {
                if (value != this.depositTotal)
                {
                    this.depositTotal = value;
                    this.MyDepositTotalChangedDoSomething();
                    this.OnPropertyChanged("DepositTotal");
                }
            }
        }
or, you can trap the propertychanged event and do it there...

in the constructor add:
     this.OnPropertyChanged += PropertyChangedDoSomethign());
then in the handler:
    private void PropertyChangedDoSomething(object sender, RoutedEventArgs e)
   {
      if(e.Property.Equals("DepositTotal")
      {
         do something here....
      }
   }
if the property definition and the code are in the same windows, then I prefer to just modify the property definition ala the first example. If they are spread across different code behinds, then example 2.

Hope this helps..
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform