Lo que estoy viendo aquí es que el nombre de clase de su ventana es Main
, que ha agregado una propiedad RecordProp
a ella, y que está ahora intenta enlazar a la propiedad IsChecked
del elemento denominado RecordProp
. Creo que estás un poco confundido sobre cómo funcionan los nombres.
Agregar el atributo x:Name
a un elemento XAML crea un campo en la clase de ventana con ese nombre. Esto le permite hacer referencia a los elementos con nombre en su código, y probablemente le haya llevado a pensar que el enlace puede hacer lo mismo.
Pero así no es cómo el enlace encuentra elementos con nombre. El atributo x:Name
también toma el objeto que crea el elemento XAML y lo registra con ese nombre en el namescope de la ventana. (Consulte MSDN's article on XAML namescopes.) Esto es lo que observa el enlace para resolver los nombres de los elementos. Como nunca agregará el objeto al namescope, establecer la propiedad ElementName
en un enlace no lo encontrará.
Hay un par de cosas que posiblemente podría hacer. Si realmente desea enlazar a una propiedad de la ventana, se puede dar a la ventana de un nombre y enlazar con el establecimiento a través de una ruta de propiedad:
<Window x:Name="MainWindow" x:Class="Main">
...
<customcontrol Name="View" IsChecked="
{Binding ElementName=MainWindow,
Path=RecordProp.IsViewChecked}" />
aún más simple es simplemente establecer el contexto de datos en el constructor:
DataContext = this;
Una vez hecho esto, sólo puede unirse a la RecordProp
propiedad (y cualquier otra propiedad de la ventana) de esta manera:
<customControl Name="View" IsChecked={Binding RecordProp.IsChecked}/>
Por supuesto, eso no va a funcionar si el yo Necesita que el contexto de datos de la ventana se establezca en otra cosa.
Otra posibilidad es aplicar la propiedad como esta:
public Record RecordProp
{
get { return (Record)Resources["RecordProp"]; }
set { Resources["RecordProp"] = value; }
}
Puede enlazar a esta utilizando (por ejemplo) Binding {DynamicResource RecordProp}, Path=IsChecked"
.Dado que es un recurso dinámico, si algo externo a la ventana establece la propiedad RecordProp
de la ventana, los enlaces se actualizarán, algo que no ocurrirá si solo hace que RecordProp
sea una propiedad (a menos que implemente una notificación de cambio).
La propiedad pública no tuvo ningún efecto. – jaws
@ user258651 Creo que también necesita actualizar el contexto de enlace para que la ventana principal lo devuelva por defecto a la clase principal. Ha pasado un tiempo desde que miré eso sin embargo. – JaredPar