首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >validationRule on ObservableCollection

validationRule on ObservableCollection
EN

Stack Overflow用户
提问于 2014-09-19 15:23:57
回答 1查看 528关注 0票数 0

当ValidationRule的内容发生变化时,我需要将它应用于ObservableCollection。该规则只检查collection.Count是否> 0。

ViewModel:

代码语言:javascript
复制
private ObservableCollection<string> _items;
public ObservableCollection<string> Items
{
  get { return _items; }
  set { _items = value; OnPropertyChanged("Items"); }
}

泛型视图示例:

代码语言:javascript
复制
  <ListBox>
    <ListBox.ItemsSource>
      <Binding Path="Items" ValidatesOnDataErrors="True">
        <Binding.ValidationRules>
          <a:ValidationRule />
        </Binding.ValidationRules>
      </Binding>
    </ListBox.ItemsSource>
  </ListBox>

当内容发生变化时,我似乎无法让validationRule被解雇。我甚至试着听CollectionChanged,直接在BindingExpression和ValidationRule上打电话,但是还没有产生结果。事件被击中,但是对绑定/规则的调用不执行验证序列。

代码语言:javascript
复制
//runs the validation, but it does not update the HasError property (appears to just run validation outside of the binding's context
collection.CollectionChanged += (sender, args) => myValidationRule.Validate(collection, CultureInfo.CurrentCulture);

//doesn't execute the validation rule.. works for regular bindings - just not ObservableCollection bindings
collection.CollectionChanged += (sender, args) => myBindingExpression.UpdateSource();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 15:53:05

实际上,更新源代码确实有效。我写了一个更小的测试,它成功了。我遇到的问题与托管该属性的自定义控件有关。抱歉那些花了很多时间调查这件事的人。

工作解决方案:

代码语言:javascript
复制
myBindingExpression = myListBox.GetBindingExpression(ListBox.ItemsSourceProperty)
collection.CollectionChanged += (sender, args) => myBindingExpression.UpdateSource();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25937331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档