Привязка флажка не работает - PullRequest
0 голосов
/ 25 января 2012

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

<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));

Ответы [ 4 ]

0 голосов
/ 25 января 2012

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

0 голосов
/ 25 января 2012

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

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

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

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

НТН

0 голосов
/ 25 января 2012

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

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

Если ваш isLoop свойство является частью объекта с именем DataContext в MainWindow, измените привязку на DataContext.isLoop

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

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

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

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

0 голосов
/ 25 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...