Was ich hier zu sehen ist, dass Ihre Fenster-Klassennamen Main
ist, dass Sie eine RecordProp
Eigenschaft hinzugefügt haben, und dass Sie versucht nun, an die IsChecked
-Eigenschaft des Elements RecordProp
zu binden. Ich denke du bist etwas verwirrt darüber, wie Namen funktionieren.
Das Hinzufügen des x:Name
-Attributs zu einem XAML-Element erstellt ein Feld in der Fensterklasse mit diesem Namen. Auf diese Weise können Sie auf benannte Elemente in Ihrem Code verweisen, und Sie haben wahrscheinlich zu der Annahme geführt, dass die Bindung dasselbe bewirken kann.
Aber das ist nicht wie bindende benannte Elemente findet. Das x:Name
Attribut auch nimmt das Objekt, das das XAML-Element erstellt und registriert es unter diesem Namen im Namescope des Fensters. (Siehe MSDN's article on XAML namescopes.) Das ist, was Bindung betrifft, um Elementnamen aufzulösen. Da Sie das Objekt nie dem Namescope hinzufügen, wird die Eigenschaft ElementName
für eine Bindung nicht gefunden.
Es gibt ein paar Dinge, die Sie möglicherweise tun könnten. Wenn Sie wirklich auf eine Eigenschaft des Fensters binden möchten, können Sie das Fenster einen Namen geben und auf die Eigenschaft binden, um eine Eigenschaft Pfad:
<Window x:Name="MainWindow" x:Class="Main">
...
<customcontrol Name="View" IsChecked="
{Binding ElementName=MainWindow,
Path=RecordProp.IsViewChecked}" />
Noch einfacher ist es, nur den Datenkontext im Konstruktor festgelegt:
DataContext = this;
Sobald Sie das tun, können Sie einfach binden an die RecordProp
Eigenschaft (und jede andere Eigenschaft des Fensters) wie folgt aus:
<customControl Name="View" IsChecked={Binding RecordProp.IsChecked}/>
natürlich, dass nicht, wenn yo arbeiten Sie müssen den Datenkontext des Fensters auf etwas anderes setzen.
Eine andere Möglichkeit ist es, die Eigenschaft wie folgt umzusetzen:
public Record RecordProp
{
get { return (Record)Resources["RecordProp"]; }
set { Resources["RecordProp"] = value; }
}
Sie binden sich an diese mit (zum Beispiel) Binding {DynamicResource RecordProp}, Path=IsChecked"
können.Da es sich um eine dynamische Ressource handelt, wird, wenn etwas außerhalb des Fensters die RecordProp
-Eigenschaft des Fensters einstellt, die Bindungen zu diesem Fenster aktualisiert - was nicht der Fall ist, wenn Sie nur RecordProp
als Eigenschaft festlegen (sofern Sie keine Änderungsbenachrichtigung implementieren).
Das öffentliche Eigentum hatte keine Auswirkungen. – jaws
@ user258651 Ich denke, dass Sie den Bindungskontext auch für das Hauptfenster aktualisieren müssen, damit es standardmäßig in die Hauptklasse zurückkehrt. Eine Weile her, seit ich das gesehen habe. – JaredPar