agentpx
agentpx

Reputation: 1081

TextBox Binding Lost when typing directly using the Keyboard

I Have a usercontrol that is being updated by another usercontrol via provided ValueProperty (see code Window.XAML Binding below) When my other usercontrol's property is being updated, the textbox is updated as well via Value Binding.

But When I directly type to the usercontrols textbox then use my other user control again. The textbox is never updated again. It seems that the ValueProperty of my TextBox UserControl's was overwritten. I am assuming that the Text={Binding...} was lost and overwritten when I directly typed in the TextBox.

//Window.XAML
<veraControls:veraCommandPanel Name="commandCTRL" Value="{Binding ElementName=MyKeyPad, Path=Value}"  HorizontalAlignment="Right" Width="360.057" Margin="0,266,-92.834,0" FontSize="42" FontFamily="lcdD" Foreground="LimeGreen" Height="54.901" VerticalAlignment="Top" />

//Here is my userControl
<UserControl x:Name="PART_command" x:Class="Vera.WPFControls.veraCommandPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="Auto" Width="300"
xmlns:local="clr-namespace:Vera.WPFControls">
<StackPanel>
    <StackPanel.Resources>
        <Style x:Name="PART_veraCommand" TargetType="{x:Type local:veraCommandPanel}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:veraCommandPanel}">
                        <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </StackPanel.Resources>
    <TextBox Height="55" Name="PART_txtCommand"  Text="{Binding ElementName=PART_command, Path=Value}" VerticalAlignment="Top" />
</StackPanel>

//TextBox UserControl's Code Behind
namespace Vera.WPFControls
{
/// <summary>
/// Interaction logic for veraCommandPanel.xaml
/// </summary>
public partial class veraCommandPanel : UserControl, INotifyPropertyChanged
{

    public veraCommandPanel()
    {
       InitializeComponent();
       this.DataContext = this;
    }


    public event PropertyChangedEventHandler PropertyChanged;
    protected void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    public static  DependencyProperty ValueProperty =
           DependencyProperty.Register("Value", typeof(string), typeof(veraCommandPanel));

    //, new UIPropertyMetadata(false, new PropertyChangedCallback(PropChanged)));

    public string Value
    {
        get
        {
            return (string)GetValue(ValueProperty);
        }
        set
        {
            SetValue(ValueProperty, value);

    }

}

}

Upvotes: 0

Views: 289

Answers (1)

Jay
Jay

Reputation: 57919

Try TwoWay binding, like this:

Text="{Binding ElementName=PART_command, Path=Value, Mode=TwoWay}"

Upvotes: 1

Related Questions