【问题标题】:WPF CheckBox.IsChecked bindingWPF CheckBox.IsChecked 绑定
【发布时间】:2012-03-30 07:29:28
【问题描述】:

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

绑定代码:

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

复选框代码:

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

选择的属性:

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

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

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

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案1】:
    bindingPicked.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    

    应该这样做:)

    【讨论】:

    • 是的...多么愚蠢的错误(并且浪费了 2 个小时来“修复”它)。谢谢:D
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如上,需要实现 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。

      【讨论】:

        猜你喜欢
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-20
        • 2018-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多