简体   繁体   中英

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);

    }

}

}

尝试TwoWay绑定,如下所示:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM