【问题标题】:WPF - Checkbox bound to whether or not ObservableCollection contains a value?WPF - 复选框绑定到 ObservableCollection 是否包含值?
【发布时间】:2010-12-17 21:33:26
【问题描述】:

我目前有一个复选框,它绑定到一个属性,该属性检查 ObservableCollection 的特定值。如果值存在,则该属性返回 true。

我的属性和公开 ObservableCollection 的属性都是只读的。

当我第一次加载我的模型时,这种方法效果很好,但是当它向 ObservableCollection 添加其他项目时,绑定到属性的复选框不会更新。

这是我的财产的代码:

public bool IsMeasure11
{
    get //readonly
    {
       return this.Charges.Any(t => t.IsMeasure11);
    }
}

这是我的 ObservableCollection 的代码:

public ObservableCollection<DACharge> Charges
{
    get //readonly
    {
        if (_charges == null)
        {
             _charges = new GenericEntityCollection<DACharge>(_DACase.Id).ToList().ToObservableCollection();
        }

        return _charges;
    }
}

以及复选框的 XAML:

<CheckBox Content="M11" Name="chkM11" IsChecked="{Binding IsMeasure11, Mode=OneWay}">

提前致谢,
桑尼

【问题讨论】:

    标签: c# wpf binding


    【解决方案1】:

    您的属性没有实现INotifyPropertyChanged,因此绑定引擎无法知道更新绑定的属性。

    ObservableCollection&lt;T&gt; 不会更新它返回的属性;在本例中为 public ObservableCollection&lt;DACharge&gt; Charges 属性。

    您需要注册ObservableCollection.CollectionChanged 事件以及添加/删除项目等...触发PropertyChanged 事件,如上一个链接中显示的Charges 属性。

    【讨论】:

      【解决方案2】:

      您需要在 Charges 集合更改时使 IsMeasure11 的绑定无效(即调用 INotifyPropertyChanged 的​​ PropertyChanged 事件)。一种方法是订阅 Charges 集合的 CollectionChanged 事件。

      // somewhere, maybe the constructor of your view model
      this.Charges.CollectionChanged += ChargesChanged;
      
      private void ChargesChanged(object sender, NotifyCollectionChangedEventArgs e)
      {
        this.NotifyOfPropertyChanged(() => IsMeasure11);
      }
      

      【讨论】:

        【解决方案3】:

        您需要执行“添加项目”操作来触发 INotifyChanged 接口的 PropertyChanged 事件,如下所述:http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

        如果不是,那么 WPF 将永远不会知道值何时更改,因为绑定不是源自 ObservableCollection,而是访问它的另一个属性。

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-07
          • 2015-04-07
          • 1970-01-01
          • 2013-10-14
          • 2013-04-18
          • 2011-03-11
          • 2010-10-26
          • 2014-05-25
          相关资源
          最近更新 更多