What I'm seeing here is that your window's class name is Main
, that you've added a RecordProp
property to it, and that you're now trying to bind to the IsChecked
property of the element named RecordProp
. I think you're a little confused about how names work.
Adding the x:Name
attribute to a XAML element creates a field in the window class with that name. This allows you to reference named elements in your code, and it probably has led you to think that binding can do the same thing.
But that's not how binding finds named elements. The x:Name
attribute also takes the object that the XAML element creates and registers it under that name in the window's namescope. (See MSDN's article on XAML namescopes.) That's what binding looks at to resolve element names. Since you're not ever adding the object to the namescope, setting the ElementName
property on a binding won't find it.
There are a couple of things you could conceivably do. If you really want to bind to a property of the window, you can give the window a name and bind to the property using a property path:
<Window x:Name="MainWindow" x:Class="Main">
...
<customcontrol Name="View" IsChecked="
{Binding ElementName=MainWindow,
Path=RecordProp.IsViewChecked}" />
Even simpler is to just set the data context in the constructor:
DataContext = this;
Once you do that, you can just bind to the RecordProp
property (and any other property of the window) like this:
<customControl Name="View" IsChecked={Binding RecordProp.IsChecked}/>
Of course, that won't work if you need the window's data context to be set to something else.
Another possibility is to implement the property like this:
public Record RecordProp
{
get { return (Record)Resources["RecordProp"]; }
set { Resources["RecordProp"] = value; }
}
You can bind to this using (for instance) Binding {DynamicResource RecordProp}, Path=IsChecked"
. Since it's a dynamic resource, if something external to the window sets the window's RecordProp
property, the bindings to it will refresh - which is something that won't happen if you just make RecordProp
a property (unless you implement change notification).