Search code examples
wpfdata-bindingtextblock

How to bind a variable with a textblock


I was wondering how I would be able to bind a text block to a variable within my C# class.

Basically I have a "cart" variable in my .cs file. Within that Cart class I have access to the different totals.

The following is what I have for binding, but it does not seem to bind to the variable...

<StackPanel
   Width="Auto"
   Height="Auto"
   Grid.ColumnSpan="2"
   Grid.Row="5"
   HorizontalAlignment="Right">
   <TextBlock
      Name="Subtotal"
      FontFamily="Resources/#Charlemagne Std"
      FontSize="20"
      Text="{Binding ElementName=cart, Path=SubTotal}">
   </TextBlock>
   <TextBlock
      Name="Tax"
      FontFamily="Resources/#Charlemagne Std"
      FontSize="20"
      Text="{Binding ElementName=cart, Path=Tax}">
   </TextBlock>
   <TextBlock
      Name="Total"
      FontFamily="Resources/#Charlemagne Std"
      FontSize="20"
      Text="{Binding ElementName=cart, Path=Total}">
   </TextBlock>
</StackPanel>

What is the correct way of doing it? Thanks again for the help!


Solution

  • If you further want the TextBoxes to update automatically when your cart class changes, your class must implement the INotifyPropertyChanged interface:

    class Cart : INotifyPropertyChanged 
    {
        // property changed event
        public event PropertyChangedEventHandler PropertyChanged;
    
        private int _subTotal;
        private int _total;
        private int _tax;
    
        private void OnPropertyChanged(String property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    
        public int SubTotal
        {
            get
            {
                return _subTotal;
            }
            set
            {
                _subTotal = value;
                OnPropertyChanged("SubTotal");
            }
        }
    
        public int Total
        {
            get
            {
                return _total;
            }
            set
            {
                _total = value;
                OnPropertyChanged("Total");
            }
        }
    
        public int Tax
        {
            get
            {
                return _tax;
            }
            set
            {
                _tax = value;
                OnPropertyChanged("Tax");
            }
        }
    
    }