Ce que je constate, c'est que la fenêtre de votre nom de classe est - Main
, que vous avez ajouté un RecordProp
de la propriété, et que vous êtes maintenant en essayant de se lier à l' IsChecked
de la propriété de l'élément nommé RecordProp
. Je pense que vous êtes un peu confus au sujet de comment travailler les noms.
L'ajout de l' x:Name
d'attribut à un élément XAML crée un champ dans la fenêtre de la classe avec ce nom. Cela vous permet de référencer des éléments nommés dans votre code, et il a probablement conduit à penser que la liaison peut faire la même chose.
Mais ce n'est pas contraignant trouve des éléments nommés. L' x:Name
attribut aussi prend de l'objet que l'élément exact crée et enregistre sous son nom dans la fenêtre de la portée de nom. (Voir l'article de MSDN sur XAML portées de nom.) C'est ce que la liaison regarde pour résoudre les noms d'éléments. Depuis que vous êtes de ne jamais ajouter l'objet à la portée de nom, réglage de l' ElementName
de la propriété sur une liaison de ne pas le trouver.
Il ya un couple de choses que vous pourriez éventuellement faire. Si vous voulez vraiment de se lier à une propriété de la fenêtre, vous pouvez donner un nom à la fenêtre et de se lier à la propriété à l'aide d'un chemin de la propriété:
<Window x:Name="MainWindow" x:Class="Main">
...
<customcontrol Name="View" IsChecked="
{Binding ElementName=MainWindow,
Path=RecordProp.IsViewChecked}" />
Même le plus simple est de définir le contexte de données dans le constructeur:
DataContext = this;
Une fois que vous faites cela, vous pouvez simplement lier à l' RecordProp
de la propriété (et de toute autre propriété de la fenêtre) comme ceci:
<customControl Name="View" IsChecked={Binding RecordProp.IsChecked}/>
Bien sûr, cela ne fonctionnera pas si vous avez besoin de la fenêtre de contexte de données à autre chose.
Une autre possibilité est de mettre en œuvre la propriété comme ceci:
public Record RecordProp
{
get { return (Record)Resources["RecordProp"]; }
set { Resources["RecordProp"] = value; }
}
Vous pouvez lier à cette utilisation (par exemple) Binding {DynamicResource RecordProp}, Path=IsChecked"
. Puisque c'est une ressource dynamique, si quelque chose d'extérieur à la fenêtre définit la fenêtre de l' RecordProp
de la propriété, les fixations, il mettra à jour - qui est quelque chose qui n'arrivera pas si vous venez de faire RecordProp
d'un bien (à moins que vous mettre en œuvre le changement de notification).