WPF CheckBox.IsChecked绑定

时间:2012-03-30 07:29:28

标签: c# wpf data-binding

我有一个数据网格,其中包含可变数量的列,我以编程方式生成这些列。它包含DataGridTemplateColumns,每个都有一个包含CheckBox和TextBlock的DockPanel。

绑定代码:

    Binding bindingPicked = new Binding(string.Format("Prices[{0}].Picked", i));
    bindingPicked.Mode = BindingMode.TwoWay;

CheckBox代码:

    FrameworkElementFactory factoryCheckBox = new FrameworkElementFactory(typeof(CheckBox));
    factoryCheckBox.SetValue(CheckBox.IsCheckedProperty, bindingPicked);

Picked property:

    private bool _picked;
    public bool Picked
    {
        get { return _picked; }
        set { _picked = value; }
    }

初始化datagrid时,将按预期调用Picked getter。但是,当我选中/取消选中复选框时,不会调用setter。是什么造成的?我不想使用DependencyProperty,我认为不应该需要它,因为我只需要在用户单击CheckBox时调用属性setter。

编辑:显然我是个白痴,我只是忘记了 bindingPicked.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 随意关闭它。

3 个答案:

答案 0 :(得分:4)

bindingPicked.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

应该这样做:)

答案 1 :(得分:1)

我认为你应该实现INotifyPropertyChanged并在集合中调用事件

答案 2 :(得分:0)

如上所述,您需要实现INotifyPropertyChanged 要遵循的正确模式是:

private bool _picked;
public bool Picked
{
    get { return _picked; }
    set
    {
        if (_picked != value)
        {
            _picked = value;
            if (null != PropertyChanged)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("Picked"));
            }
        }
    }
}

UpdateSourceTrigger属性告诉数据绑定何时更新源。 例如,对于TextBox,默认值为LostFocus。对于大多数其他控件,它是PropertyChanged。