我正在寻找一个解决方案和/或在DataTemplate中共享绑定实例的合理性。这最终归结为这样一个事实:在DataTemplate中,似乎没有办法为每个生成的控件强制在DependencyProperty上绑定的新实例。在所有情况下,这可能都是一个公平和良好的假设,除非有ValidationRules表示该控件实例的特定内容。
为了详细说明(我可以提供代码,但我不认为这是必要的),我使用DependencyPropertyDescriptor on IsEnabled来更新一个或多个属于TextBox.Text绑定、DatePicker.Text绑定或ComboBox.SelectedValue绑定的ValidationRules。
因此,ValidationRule的IsEnabled状态是特定于单个控件的,因为ValidationRule集合是绑定的一部分,绑定实例是共享的-每个共享绑定的控件都将更新/覆盖以前生成的控件的IsEnabled值应用的前一个IsEnabled值。
IsEnabled只是ValidationRule (另一个自定义IsRequired DependencyProperty)中表示应用绑定的控件的状态的至少两个属性之一。当在DataTemplate之外工作时(IE:绑定实例不是共享的),这会很好地工作,并且会根据控件的状态忽略/更改验证逻辑。我并不禁止使用其他选项,但我确实觉得这是一个非常灵活和动态的选项,它允许绑定实例ValidationRule和规则的控件更改状态轻松地发展。这也使我能够避免其他明显但更丑陋的选项,例如创建几个绑定,每个绑定代表ValidationRule的控件属性的组合之一,并在DependencyPropertyDescriptor触发时切换整个绑定。寒战
任何想法都很感激!
发布于 2014-01-24 13:25:04
我建议您在X:共享属性定义中使用DataTemplate。
<DataTemplate x:Key="DataTemplateKey" DataType="{x:Type YourType}" x:Shared="False">
...
</DataTemplate>由于您使用它,WPF将在每个请求上创建一个新的DataTemplate实例。
https://stackoverflow.com/questions/10325407
复制相似问题