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,-开发者_如何学Python92.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);
}
}
}
Try TwoWay
binding, like this:
Text="{Binding ElementName=PART_command, Path=Value, Mode=TwoWay}"
精彩评论