Frage

Ich habe gerade ein schreckliches Problem mit meiner WPF -Anwendung ...

Ich habe eine benutzerdefinierte Usercontrol, die zum Bearbeiten von Details einer Komponente verwendet wird. Es sollte nicht aktiviert werden und aktiviert werden, sobald der Benutzer eine Komponente zum Bearbeiten ausgewählt hat.

Das Problem ist: Die isenabled -Eigenschaft ändert sich nicht einmal.

Hier ist mein Code:

<my:UcComponentEditor Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  
                        IsEnabled="{Binding EditorEnabled}"
                              DataContext="{Binding VmComponent}" />

Reditedabled ist eine Eigenschaft in meinem ViewModel (vmComponent) und standardmäßig falsch, wird wahr, wenn der Benutzer eine Komponente ausgewählt oder eine erstellt hat

Nur für die Aufzeichnung, meines ViewModel:

private Boolean _editorEnabled = false;

    public Boolean EditorEnabled
    {
        get { return _editorEnabled; }
        set 
        {
            _editorEnabled = value;
            OnPropertyChanged("EditorEnabled");
        }
    }

Wenn ich versuche, meine App zu starten, beginnt die UserControl ... aktiviert. Ich habe überall Halterpunkte hinzugefügt, die redeturabled ist von Anfang an falsch.

Ich habe auch eine schrecklich dumme Sache getan, um herauszufinden, was passiert: Ich habe einen Konverter erstellt (so nützlich - einen Booleschen in boolean - EH), einen Breakpoint darauf einzulegen, und ... der Code wird nie erreicht.

<my:UcComponentEditor Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  
                        IsEnabled="{Binding EditorEnabled, Converter={StaticResource BoolConverter}}"
                              DataContext="{Binding VmComponent}" />

Das bedeutet wahrscheinlich, dass die Eigenschaft isenabled nie festgelegt wird, da der Konverter nie erreicht wird.

Sehen Sie dort irgendeine Art von Problem? Ich habe vor ungefähr einer Woche in WPF gearbeitet und vielleicht habe ich etwas Wesentliches verpasst ...

Vielen Dank für Ihre Zeit :-)

War es hilfreich?

Lösung

Sie sollten eine Abhängigkeitsprüfung hinzufügen, damit die Bindung ordnungsgemäß funktioniert. Weitere Informationen finden Sie hier.

Code-Behind:

public static readonly DependencyProperty EditorEnabledDependencyProperty = DependencyProperty.Register("EditorEnabled", typeof(bool), typeof(UcComponentEditor), new PropertyMetadata(false));

public bool EditorEnabled
{
    get { return (bool)base.GetValue(UcComponentEditor.EditorEnabledDependencyProperty); }
    set { base.SetValue(UcComponentEditor.EditorEnabledDependencyProperty, value); }
}

Andere Tipps

Ich denke, das Problem ist, dass die DataContext -Eigenschaft der Benutzerkontrolle verbindlich ist. Dies bedeutet, dass die rededabled -Eigenschaft eine Eigenschaft im vmComponent -Objekt sein sollte. Zumindest war das mein Problem.

Um es zu umgehen, habe ich eine ordnungsgemäße Quelle für die Bindung von Isenabled angegeben. Sobald ich das tat, begann die Kontrolle wie erwartet zu arbeiten.

Ich hoffe, das hilft.

Wenn Sie Ihre Steuerung in einem Dockpanel (z. B.) einschränken, müssen Sie die Notwendigkeit einer Abhängigkeitspflicht entfernen.

Sie können dann einfach Ihre Bindung mit dem Dockpanel anstelle der benutzerdefinierten Steuerung durchführen. Durch das Einstellen der auf dem Dockpanel gebundenen Variablen werden die im Dockpanel enthaltenen Elemente automatisch aktiviert oder deaktiviert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top