我正在尝试将DataContext
中的属性绑定到ValidationRule
中的属性:
public class ReleaseValidationRule : ValidationRule
{
// I want to bind a value from my DataContext to this property:
public CheckboxViewModels ValidReleases { get; set; }
...
}
基于this thread,我创建了CheckboxViewModels
类,只是作为List<CheckboxViewModel>
的包装器,以便列表可以是DependencyProperty
,这样我就可以绑定它。但是,在Validate
上的ValidationRule
方法中,ValidReleases
列表始终为空。这是我的XAML:
<TextBox>
<TextBox.Text>
<Binding Path="Release" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:ReleaseValidationRule>
<local:ReleaseValidationRule.ValidReleases>
<local:CheckboxViewModels List="{Binding Path=Releases,
Converter={StaticResource debugConverter}}"/>
</local:ReleaseValidationRule.ValidReleases>
</local:ReleaseValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
我知道Releases
属性(我绑定到List
的{{1}}属性的内容)有内容,因为CheckboxViewModels
位于{{1}之上显示TreeView
的内容。我在TextBox
绑定上的转换器什么也没做,它只是我可以设置断点的地方。有趣的是,转换器断点永远不会被击中。好像整行Releases
永远不会被执行,因此CheckboxViewModels.List
中的<local:CheckboxViewModels List="{Binding Path=Releases, Converter={StaticResource debugConverter}}"/>
属性永远不会被设置。发生了什么事?
修改:这是ValidReleases
的样子:
ValidationRule
答案 0 :(得分:0)
在某处闻起来像是遗失了Property Changed通知。很难看出CheckboxModels是关于什么的,但是如果它是ObservableCollection你就会在没有任何额外工作的情况下更改属性。这有意义吗?
HTH,
Berryl
答案 1 :(得分:0)
好的,现在我觉得很傻。我在CheckboxViewModels
设置了List = new List<CheckboxViewModel>()
的构造函数。我认为这是以某种方式重置某些东西?我删除了该构造函数,List
的初始值仅在Register
:DependencyProperty
的{{1}}方法中设置。现在使用以下XAML按预期填充new PropertyMetadata(new List<CheckboxViewModel>())
:
ValidReleases
编辑:毕竟不是那么愚蠢:<TextBox>
<TextBox.Text>
<Binding Path="Release" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:ReleaseValidationRule ValidatesOnTargetUpdated="True">
<local:ReleaseValidationRule.ValidReleases>
<local:CheckboxViewModels
List="{Binding Path=Releases, Mode=OneWay}"/>
</local:ReleaseValidationRule.ValidReleases>
</local:ReleaseValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
中没有构造函数导致使用相同列表的类型CheckboxViewModels
的两个依赖项属性,所以我有发布和其他CheckboxViewModels
属性和另一个属性中的数据。将构造函数添加回Releases
会导致CheckboxViewModels
再次没有任何项目。我想我必须纠正错误的东西。
答案 2 :(得分:0)
我停止使用验证规则,而是关注this tutorial about implementing IDataErrorInfo
。那是我的类实例在我进入this[string]
以找出错误消息时完全初始化的。我试图传入的数据只是来自同一实例上另一个属性的数据。也就是说,我想使用Property1
中的一些数据验证Property2
。使用IDataErrorInfo
,当我验证Property1
并在必要时收集错误消息时,我可以根据需要访问Property2
,而无需传递任何内容。