Escenario: UserControl que tiene un TextBox de solo lectura y un Botón. TextBox.Text se modifica y actualiza cada vez que se presiona el botón.WPF: Actualizar Propiedad de Dependencia sin INotifyPropertyChanged (UserControl)
Problema: La propiedad TextControl.Text está vinculada a la propiedad de dependencia UserControl.Message pero no se actualiza cuando UserControl.Message se modifica desde UserControl. Sin embargo, el objetivo se actualiza cuando se implementa INotifyPropertyChanged.
En realidad, no necesito implementar INotifyPropertyChanged en una propiedad de dependencia ¿verdad? ¿Qué me estoy perdiendo? Por favor, consulte el código de demostración here.
Gracias.
Declaración mensaje lugar
public static readonly DependencyProperty MessageProperty =
DependencyProperty.Register("Message", typeof (string),
typeof (TextControl), new FrameworkPropertyMetadata("[WPFApp]" +
Environment.NewLine, OnMessageChanged, OnMessageCoerce));
public string Message
{
get { return (string) GetValue(MessageProperty); }
set { SetValue(MessageProperty, value); }
}
private static object OnMessageCoerce(DependencyObject obj,
object baseValue)
{
return (string) obj.GetValue(MessageProperty) + (string) baseValue;
}
private static void OnMessageChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
// do i need to do this?
((TextControl) d).NotifyPropertyChanged("Message");
}
control de usuario abreviado XAML
<UserControl x:Class="WPFApp.TextControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" d:DesignHeight="64" d:DesignWidth="355"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<TextBox Text="{Binding Message, Mode=OneWay}" ... />
<Button ... />
</Grid>
</UserControl>
¡Solución perfecta! Trataré de prestar más atención a la ventana de salida, pero no parece mostrar un error vinculante en este caso. Gracias de nuevo. – BakaBoy
¿Por qué se necesita RelativeSource? ¿Por qué no se hereda el DataContext? –