Domanda

Ok ... questo mi sta lasciando grattarmi la testa. Ho due controlli WPF: uno è un controllo utente e l'altro è un controllo personalizzato. Chiamiamoli UserFoo e CustomFoo. Nel modello di controllo per CustomFoo, utilizzo un'istanza di UserFoo che è una parte denominata in modo da poterlo applicare dopo l'applicazione del modello. Funziona bene.

Ora sia UserFoo che CustomFoo hanno un Text Proprietà definita su di essi (indipendentemente, cioè un DP condiviso usando ADDOWNER. Non chiedere ...) che sono entrambi dichiarati così ...

public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
    "Text",
    typeof(string),
    typeof(UserFoo), // The other is CustomFoo
    new FrameworkPropertyMetadata(
        null,
        FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
        null,
        null,
        true,
        UpdateSourceTrigger.PropertyChanged
    )
);

Notare specificamente che la modalità è impostata su Thoway e gli aggiornamenti.

Quindi, nel modello di stile per CustomFoo, voglio legare la proprietà di testo di CustomFoo come origine alla proprietà di testo di UserFoo interno. Normalmente, questo è facile. Basta impostare la proprietà di testo di UserFoo su "{TemplateBinding Text}" ma per qualche motivo sta andando solo in un modo (cioè UserFoo è correttamente impostato da CustomFoo, ma non il contrario), anche se di nuovo, entrambi i DP sono impostati per due vie! Tuttavia, quando si utilizza un legame di sorgente relativo anziché un legame modello, funziona alla grande! Um ... wha ??

// This one works
Text="{Binding Text, RelativeSource={RelativeSource AncestorType={local:CustomFoo}}, Mode=TwoWay}"

// As does this too...
Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"

// But not this one!
Text="{TemplateBinding Text}"

Allora cosa dà? Cosa mi manca?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top