【发布时间】:2011-08-19 15:13:50
【问题描述】:
我正在开发一个使用 DataAnnotations 实现 MVVM 设计模式的应用程序。该应用程序是一个动态生成的页面列表。在其中一个页面上,我有 10 个必填字段和 2 个是/否单选按钮。这 10 个字段分为两组,每组都带有一个边框标签。每个边框的可见性都与隐藏/可见的单选按钮绑定。
我的问题是,如果选择了“是”并显示了相关的 5 个必需文本框,我如何将 ValidatesOnDataErrors 设置为 false/true 并清除其他隐藏的必需文本框的文本框值?
这是一个代码片段。
谢谢
<Border>
<Border.Style>
<Style>
<Setter Property="Border.Visibility" Value="Hidden"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=PresentlyEmployed_yes, Path=IsChecked}"
Value="True">
<Setter Property="Border.Visibility" Value="Visible"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Grid Height="Auto" Width="Auto">
<Label Name="JobTitle"
Content="{x:Static properties:Resources.JobTitlelbl}" />
<TextBox Name="JobTitle" Text="{Binding JobTitle, Mode=TwoWay,
ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding PrimaryInsuredBusinessDuties, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged, IsAsync=True}" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=PresentlyEmployed_yes, Path=IsChecked}"
Value="True">
<Setter Property="Text" Value="{Binding JobTitle, Mode=TwoWay,
ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=PresentlyEmployed_yes, Path=IsChecked}"
Value="False">
<Setter Property="Text" Value="{Binding JobTitle, Mode=TwoWay,
ValidatesOnDataErrors=False, UpdateSourceTrigger=PropertyChanged}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
</Border>
【问题讨论】:
-
为什么不在触发器中重新绑定
Text值而不使用ValidatesOnDataErrors? -
我试过了,没用。问题是,一旦 ValidatesOnDataErrors 设置为 True 并且我尝试使用 ValidatesOnDataErrors = False 或不使用 ValidatesOnDataErrors 重新绑定它,或者即使我没有将它绑定到任何东西,它也不会删除验证。这是我的属性的样子: [Required(ErrorMessage = "Required Field!")] public string JobTitle { get { return _jobTitle; } 设置 { _jobTitle = 值; } } 谢谢,
-
也许它没有更新 UI,因为 BindingSource 没有改变。尝试在
RadioButton更改时在 ViewModel 中引发PropertyChanged事件,此外还要重新绑定属性。 -
感谢您的快速回复,让我试试,稍后会回复。
-
还是没有运气!它打开了估值,但没有关闭。顺便说一句,在我的单选按钮属性设置器中,我引发了 onpropertychanged 事件并传递了属性名称。我在每个属性设置器中都这样做。我在这里错过了什么吗?