Posiadam właściwość int dependency na moim niestandardowym polu tekstowym, który zawiera wartość podkładu. Jest związany z int? właściwość w DataContext.Wyzwalacz właściwości zależności nie jest uruchamiany, gdy funkcja PropertyChanged jest uruchamiana, ale wartość źródłowa nie jest zmieniana.
Jeśli podniosę zdarzenie PropertyChanged w moim DataContext, a wartość właściwości źródłowej nie zostanie zmieniona (pozostanie pusta), to ustawienie właściwości zależności nie zostanie uruchomione.
Jest to problem, ponieważ chcę zaktualizować niestandardowy obiekt Textbox (wyczyść tekst) w oknie PropertyChanged, nawet jeśli właściwość źródłowa pozostanie taka sama. Jednak nie znalazłem żadnej wiążącej opcji, która robi to, co chcę (jest właściwość UpdateSourceTrigger, ale chcę zaktualizować cel tutaj, a nie źródło). Być może jest lepszy sposób, aby poinformować pole tekstowe, że musi usunąć tekst, jestem otwarty na wszelkie sugestie.
Źródło, zgodnie z wnioskiem (uproszczony)
DataContext (źródło):
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");
}
}
niestandardowe pole tekstowe (docelowy):
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
}
Czy możesz dodać kod? Ułatwi to zrozumienie twojego problemu. Jak dokładnie podnosisz zdarzenie PropertyChanged w swoim DataContext? – wpfwannabe
Należy zaktualizować, nawet jeśli źródło jest takie samo. Opublikuj swój kod, rozwiązanie powinno być łatwe do wykrycia. –
Wysłałem kod. Aplikacja jest zbyt skomplikowana, aby uwzględnić tutaj całe źródło. Nazwy zostały zastąpione. –