Mookie
Mookie

Reputation: 35

Textbox not updating

Ive tried searching, but maybe im not using the right terms to search for.

I have several textboxes that im using, and when i enter data, i see the values being updated when debugging, but they never get updated to the form.

Basically, I have a form that is used for the visuals, and then i have a class that handles all the activity. I have created the class as a resource, and I am referencing to the resource within the textboxes.

The only way that i really knew how to handle the updating of the forms was by implementing the calculations on values changing. So if I updated a property, I called the method from OnPropertyChanged(). This created issues because the values were always getting changed due to the calculations rewriting values. I then tried evaluating the changes of the new value

I.E.

public double In1
{
    get{_return _in1;}
    set{
        if (_in1 != value)
        _in1 = value;

        OnPropertyChanged("In1");
    }
}

regardless of anything, my problem is that i dont see the values getting written to the textbox. This is my first real endevour of using data binding so im assuming that im doing something incorrectly (clearly)

<ad:DockableContent
    xmlns="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" 
    x:Class="DMC_Robot_Editor.GUI.frmAngleConvertor"
    Title="frmAngleConvertor" Height="259" Width="282">
<ad:DockableContent.Resources>       
    <local:AngleConvertor x:Key="Converter"/>
</ad:DockableContent.Resources>
<Grid >    
        <GroupBox HorizontalAlignment="Stretch" VerticalAlignment="Top">
        <Grid>
 <ComboBox  x:Name="cbInput" HorizontalAlignment="Stretch" VerticalAlignment="Top"     Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="1"  DisplayMemberPath="ValueCartesianString"     SelectedValuePath="ValueCartesianEnum" IsSynchronizedWithCurrentItem="True"      SelectedIndex="{Binding InputItem,Source={StaticResource Converter}}" ItemsSource="{Binding InputConvention, Source={StaticResource Converter}}"  IsReadOnly="True"/>
                    <TextBox x:Name="tbIn1" HorizontalAlignment="Center"     VerticalAlignment="Bottom" Text="{Binding In1, Converter={StaticResource DoubleToStringConverter}, Source={StaticResource Converter}}" Grid.Column="0"     d:LayoutOverrides="GridBox" Grid.Row="2" Width="50" TextAlignment="Center">
                        <TextBox.DataContext>
                            <local:AngleConvertor/>
                        </TextBox.DataContext>                    </Grid>
</ad:DockableContent>

public class AngleConverter()
{
    private double _in1 = 0.0;
    public double In1
    {
        get{_return _in1;}
        set{
            if (_in1 != value)
            _in1 = value;

            OnPropertyChanged("In1");
        }
    }
}

Upvotes: 0

Views: 1100

Answers (4)

paparazzo
paparazzo

Reputation: 45106

Review the binding
Does DoubleToStringConverter get called?
Is get called?

Text="{Binding In1, Converter={StaticResource DoubleToStringConverter}, Source={StaticResource Converter}}"

Move Source out of binding in into DataContext on the DockableContent.

DataContext="{Binding RelativeSource={RelativeSource self}}"

Try with no converter

Text="{Binding In1}"

Upvotes: 0

Aghilas Yakoub
Aghilas Yakoub

Reputation: 29000

You can add to your binding UpdateSourceTrigger=PropertyChanged with your Mode TwoWay

<TextBox Name="tbIn1" 

HorizontalAlignment="Center"     
VerticalAlignment="Bottom" 

Text="{Binding In1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, 
Converter={StaticResource DoubleToStringConverter}, 
Source={StaticResource Converter}}" 

Grid.Column="0"     
d:LayoutOverrides="GridBox" 
Grid.Row="2" 
Width="50" 
TextAlignment="Center"
/> 

Upvotes: 1

blindmeis
blindmeis

Reputation: 22445

your real code should have something like this:

public class AngleConverter : INotifyPropertyChanged

so i assume its just a typo in your code. you did not post your converter code, the binding in your textbox is ok. Textbox default UpdateSourceTrigger is lostfocus. so maybe UpdateSourceTrigger=PropertyChanged did what you want.

Upvotes: 0

alex.b
alex.b

Reputation: 4577

Try to apply UpdateSourceTrigger=PropertyChanged on your text box:

Text="{Binding Path-In1, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource DoubleToStringConverter}, Source={StaticResource Converter}}"  
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Upvotes: 1

Related Questions