WPF: TextBox Text wird nicht aktualisiert

Ich habe ein Benutzersteuerelement, das ich in einem verwendeDataTemplate, dieseUserControl enthält einTextBox was gebunden ist mitWert Eigentum (deklariert alsDependencyProperty) von meinenUserControl. In Datenvorlage binde ich dieseWert Eigentum mit meinem tatsächlichen Eigentum sagenName (auch einDependencyProperty). Es funktioniert einwandfrei, ich weise einen Wert zuName Eigentum beim Laden und meineTextBox zeigt es an, ich ändere den Wert vonTextBox und es aktualisiert meineName Eigentum auch. Jetzt kommt das Problem, während ich einen hinzufügePropertyChangedEventHandler In der Abhängigkeitseigenschaft überprüfe ich, ob der Wert gültig ist, tue nichts, wenn er gültig ist, und weise alten Wert zu, wenn er nicht gültig ist. Wenn der Wert ungültig ist und ich ihm diesen alten Wert zugebe, wird die Eigenschaft aktualisiert, aber der aktualisierte Wert wird in meinem nicht angezeigtTextBox vonUserControl. Kann mir jemand sagen warum?

XAML von meinenUserControl:

<UserControl x:Name="usercontrol">
   <StackPanel>
      <TextBlock ......./>
      <TextBox Binding={Binding ElementName=usercontrol, Path=Value, Mode=TwoWay}/>
   </StackPanel>
</UserControl>

Im Code dahinterWert ist einDependencyProperty

Ich benutze dies in meinemDataTemplate:

<HierarchicalDataTemplate DataType="{x:Type myLib:myClass}" ItemsSource="{Binding Children}">
    <Expander Header="{Binding}">
        <WrapPanel>
            <edproperty:TextPropertyEditor Caption="Name" Value="{Binding Name, Mode=TwoWay}"/>
            <edproperty:TextPropertyEditor .................../>
            <edproperty:TextPropertyEditor .................../>
            <edproperty:TextPropertyEditor ...................../>
        </WrapPanel>
    </Expander>
</HierarchicalDataTemplate>

Diese Vorlage verwende ich in einemTreeView. InnerhalbTreeView Ich gebe Wert in das einTextBox das aktualisiert dieWert Eigentum von mirUserControl, die wiederum aktualisiertName Eigentum vonmyClass Ich weise einPropertyChangedCallback zu meinemName Immobilien inmyClass, führen eine Überprüfung durch und weisen dieOldValue wenn die Validierung fehlschlägt. Es wird wiederum aktualisiertWert Eigentum auch, aber ich sehe immer noch, dass dieTextBox hat den gleichen Wert, den ich zuvor eingegeben habe, nicht den aktualisierten.

public string Name
    {
        get
        {
            return (string)GetValue(NameProperty);
        }
        set
        {
            SetValue(NameProperty, value);
        }
    }

    // Using a DependencyProperty as the backing store for Name.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty NameProperty =
        DependencyProperty.Register("Name", typeof(string), typeof(myClass), new UIPropertyMetadata(null, OnNameChanged));

    protected static void OnNameChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
    {
        if(checkRequired && !IsValid(e.NewValue.ToString()))
        {
            checkRequired=false;
            (sender as myClass).Name = args.OldValue.ToString();
        }
    }

    private static bool IsValid(string name)
    {
         .............some logic here
    }

Antworten auf die Frage(4)

Ihre Antwort auf die Frage