Здесь я вижу, что имя класса вашего окна Main
, что вы добавили к нему свойство RecordProp
, и что вы сейчас пытаетесь привязать к свойству IsChecked
элемент с именем RecordProp
. Я думаю, вы немного озадачены тем, как работают имена.
Добавление атрибута x:Name
к элементу XAML создает поле в классе окна с этим именем. Это позволяет вам ссылаться на именованные элементы в вашем коде, и это, вероятно, привело вас к мысли, что привязка может делать то же самое.
Но привязка не находит именованные элементы. Атрибут x:Name
также принимает объект, который создает элемент XAML, и регистрирует его под этим именем в области имен окна. (См. статью MSDN по именным областям XAML. ) Это то, на что смотрит привязка для разрешения имен элементов. Поскольку вы никогда не добавляете объект в область имен, установка свойства ElementName
в привязке не найдет его.
Есть пара вещей, которые вы могли бы сделать. Если вы действительно хотите связать со свойством окна, вы можете дать окну имя и связать со свойством, используя путь свойства:
<Window x:Name="MainWindow" x:Class="Main">
...
<customcontrol Name="View" IsChecked="
{Binding ElementName=MainWindow,
Path=RecordProp.IsViewChecked}" />
Еще проще установить контекст данных в конструкторе:
DataContext = this;
После этого вы можете просто привязать свойство RecordProp
(и любое другое свойство окна) следующим образом:
<customControl Name="View" IsChecked={Binding RecordProp.IsChecked}/>
Конечно, это не сработает, если вам нужно, чтобы контекст данных окна был установлен на что-то другое.
Другая возможность - реализовать свойство следующим образом:
public Record RecordProp
{
get { return (Record)Resources["RecordProp"]; }
set { Resources["RecordProp"] = value; }
}
Вы можете связать это с помощью (например) Binding {DynamicResource RecordProp}, Path=IsChecked"
. Поскольку это динамический ресурс, если что-то внешнее к окну устанавливает свойство окна RecordProp
, привязки к нему обновятся - чего не произойдет, если вы просто сделаете свойство RecordProp
(если вы не реализуете уведомление об изменении ).