Ho una proprietà di dipendenza int sulla mia casella di testo personalizzata, che contiene un valore di supporto. È legato a un int? proprietà sul DataContext.Il setter della proprietà di dipendenza WPF non si attiva quando PropertyChanged viene attivato, ma il valore di origine non viene modificato
Se si genera l'evento PropertyChanged nel mio DataContext e il valore della proprietà di origine non viene modificato (rimane nullo), il setter della proprietà di dipendenza non viene attivato.
Questo è un problema, perché voglio aggiornare la casella di testo personalizzata (cancella il testo) su PropertyChanged, anche se la proprietà di origine rimane la stessa. Tuttavia, non ho trovato alcuna opzione di binding che faccia ciò che voglio (c'è una proprietà UpdateSourceTrigger, ma voglio aggiornare il target qui, non la fonte). Forse c'è un modo migliore per informare il Textbox di cui ha bisogno per cancellare il suo testo, sono aperto a qualsiasi suggerimento.
Source, come richiesto (semplificato)
DataContext (fonte):
private int? _foo;
public int? Foo
{
get
{
// The binding is working, because _foo is retrieved (hits a breakpoint here).
// RaisePropertyChanged("Foo") is called from elsewhere, even if _foo's value is not changed
return _foo;
}
set
{
// Breakpoint is hit on user input, so the binding is working
_foo = value;
RaisePropertyChanged("Foo");
}
}
personalizzato casella di testo (target):
public double? Value
{
get
{
return (double?)GetValue(ValueProperty);
}
set
{
// When Foo is null and Value is also null, the breakpoint is not hit here
SetValue(ValueProperty, value);
// This is the piece of code that needs to be run whenever Value is set to null
if (value == null && !String.IsNullOrEmpty(Text))
{
Text = String.Empty;
}
}
}
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double?), typeof(CustomTextbox), new PropertyMetadata(null, ValueChangedHandler));
private static void ValueChangedHandler(DependencyObject dependecyObject, DependencyPropertyChangedEventArgs e)
{
// When Foo is null and Value is also null, the breakpoint is not hit here
}
Puoi pubblicare un po 'di codice? Renderebbe la comprensione del tuo problema molto più semplice. Come stai sollevando esattamente l'evento PropertyChanged nel tuo DataContext? – wpfwannabe
Dovrebbe essere aggiornato anche se la fonte è la stessa. Pubblica il tuo codice, la soluzione dovrebbe essere facile da individuare. –
Ho pubblicato del codice. L'applicazione è troppo complessa per includere l'intera fonte qui. I nomi sono stati sostituiti. –