复选框绑定无法正常工作

时间:2012-01-25 14:48:25

标签: wpf binding checkbox

我搜索了论坛并按照建议完成了创建依赖项属性并将其绑定到复选框的所有内容,但由于某种原因它没有绑定。

<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 :(得分:0)

您绑定到Window本身。你的意思是这样吗?除非你的代码示例在后面的代码中,否则绑定将不起作用。

答案 1 :(得分:0)

你在样本中犯了一些关键错误。

首先,您没有绑定到支持“isLoop”属性的对象(除非“MainWindow”是具有该属性的自定义控件)。在CheckBox的层次结构中,您需要将DataContext设置为支持它的对象,或绑定到具有该属性的元素。

其次,您应该很少(如果有的话)在业务对象中创建依赖项属性。对于业务对象,请遵循INotifyPropertyChanged模式。通常,您应该在可视UI元素中创建依赖项属性,例如自定义控件,以便能够将数据绑定到它们(目标,而不是源)。

因此,为了解决您的问题,您应该创建一个实现INotifyPropertyChanged的对象,创建一个IsLoop属性,该属性在setter中抛出NotifyPropertyChanged事件,并将此对象设置为CheckBox的父容器的DataContext(或者进一步向上)等级(如果适用)。

HTH

答案 2 :(得分:0)

由于你正在使用ElementName绑定,我猜你绑定了一个UI元素。问题是,默认的UI元素都没有附带名为isLoop的属性,因此您的绑定无效。

您可以尝试一些事项。

如果您的isLoop属性是名为MainWindow DataContext的对象的一部分,请将绑定更改为DataContext.isLoop

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

如果isLoop实际上是名为MainWindow的自定义类的属性(例如您的依赖项属性隐含),请验证名为MainWindow的对象实际上是MainWindow类型的对象

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

如果这些都不起作用,请发布完整的XAML(特别是名为MainWindow的部分),类MainWindow的代码以及绑定MainWindow类对象的代码使用XAML UI。

答案 3 :(得分:0)

单击复选框时,不会触发isLoop。这仅仅是为了访问代码中的depency属性。您应该添加一个PropertyCallback函数并在元数据中注册它。