2012-01-25 3 views
-1

Я искал форум и сделал все, как вам было рекомендовано создать свойство зависимостей, и привязать его к флажку, но по какой-то причине он не связывается.Флажок привязки не работает

<CheckBox IsChecked="{Binding ElementName=MainWindow, Path=isLoop}" Content="" Height="22" HorizontalAlignment="Left" Margin="250,208,0,0" x:Name="checkBox1" VerticalAlignment="Top" Width="22" /> 

C#

public bool isLoop 
    { 
     get { return (bool)GetValue(isLoopProperty); } 
     set { SetValue(isLoopProperty, value); } 
    } 

    public static readonly DependencyProperty isLoopProperty = 
     DependencyProperty.Register("isLoop", typeof(bool), typeof(MainWindow), new UIPropertyMetadata(true)); 
+0

Каков ваш DataContext? –

+1

Окно 'output' дает вам ошибку привязки? – doblak

+1

Что именно означает «Он не связывает»? – NestorArturo

ответ

0

Вы сделали некоторые ключевые ошибки в своем примере.

Во-первых, вы не привязываетесь к объекту, который поддерживает ваше свойство isLoop (если «MainWindow» не является настраиваемым элементом управления, обладающим этим свойством). Где-то в этой иерархии CheckBox вам нужно установить DataContext для объекта, который его поддерживает, или привязать к элементу, у которого есть это свойство.

Во-вторых, вы должны редко, если вообще когда-либо, создавать свойство зависимостей в своем бизнес-объекте. Для бизнес-объектов следуйте шаблону INotifyPropertyChanged. Как правило, вы должны создавать свойства зависимостей в визуальных элементах пользовательского интерфейса, например, настраиваемые элементы управления, чтобы иметь возможность привязывать к ним данные (цель, а не источник).

Итак, чтобы исправить вашу проблему, вероятно, вы должны создать объект, который реализует INotifyPropertyChanged, создать свойство IsLoop, которое генерирует событие NotifyPropertyChanged в установщике, и установить этот объект в качестве DataContext в родительский контейнер CheckBox (или дальше вверх иерархия, если это необходимо).

НТН

0

Вы связываясь с самого окна. Вы хотите сделать это? Если ваш код не указан в коде, то привязка не будет работать.

0

Поскольку вы используете ElementName связывание, я предполагаю, что вы привязка к элементу пользовательского интерфейса. Проблема в том, что ни один из элементов интерфейса UI по умолчанию не имеет свойства с именем isLoop, поэтому ваша привязка недействительна.

Есть несколько вещей, которые вы можете попробовать.

Если isLoop свойство является частью объекта с именем MainWindow-х DataContext, измените связывание с DataContext.isLoop

<CheckBox IsChecked="{Binding ElementName=MainWindow, Path=DataContext.isLoop}" ... /> 

Если isLoop на самом деле это свойство на пользовательский класс под названием MainWindow, например, как ваше свойство зависимостей предполагает, проверить что объект с именем MainWindow фактически типа MainWindow

<local:MainWindow x:Name="MainWindow" /> 

И если ни один из них горе rk, разместите свой полный XAML (в частности, часть с именем MainWindow), код для класса MainWindow и код, который связывает объект класса MainWindow с пользовательским интерфейсом XAML.

0

isLoop не будет срабатывать при щелчке по галочке. Это просто для доступа к свойству depency в коде. Вы должны добавить функцию PropertyCallback и зарегистрировать это в метаданных.

Смежные вопросы