将验证规则应用于ListView的ItemsSource属性

So *_*ins 4 .net c# data-binding validation wpf

我想通过检查ItemsSource是否包含空集合来验证ListView。这是XAML。

<ListView x:Name="lstvItemsInGroup" 
            <ListView.ItemsSource>
                <Binding Path="ItemsInGroup" Mode="OneWay" UpdateSourceTrigger="PropertyChanged">
                    <Binding.ValidationRules>
                        <local:CollectionNotEmptyValidationRule ErrorMessage="You must select at least one item" />
                    </Binding.ValidationRules>
                </Binding> 
            </ListView.ItemsSource>

        </ListView>
Run Code Online (Sandbox Code Playgroud)

这是ValidationRule。

public class CollectionNotEmptyValidationRule : ValidationRule
    {
        public string ErrorMessage
        { get; set; }



    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        ValidationResult lResult = null;

        IEnumerable<object> lCollection = (IEnumerable<object>)value;
        if (lCollection == null || lCollection.Count() == 0)
        {
            lResult = new ValidationResult(false, ErrorMessage);
        }
        else
        {
            lResult = new ValidationResult(true, null);
        }

        return lResult;
    }
Run Code Online (Sandbox Code Playgroud)

我在加载用户控件时强制验证

lstvItemsInGroup.GetBindingExpression(ListView.ItemsSourceProperty).UpdateSource();
Run Code Online (Sandbox Code Playgroud)

但是甚至没有调用ValidationRule,我在第一行有一个断点,什么也没有。

有什么线索吗?

谢谢。

Pav*_*kov 6

在这里http://msdn.microsoft.com/zh-cn/library/system.windows.data.bindingexpression.updatesource.aspx,据说该UpdateSource方法仅在绑定处于TwoWayOneWayToSource模式下时才更新源。因此,请尝试设置Mode=TwoWay绑定。