我有一个数据网格,其中包含可变数量的列,我以编程方式生成这些列。它包含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; 随意关闭它。答案 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。