我需要做什么,使ContentControl与IDataErrorInfo一起工作,并在选中或取消选中复选框时检查有效性?
一些代码:
捆绑:
<ContentControl Content="{Binding GeneralinvoiceTypes,ValIDatesOnDataErrors=True}" margin="0,5,0" />
数据模板:
<DataTemplate DataType="{x:Type viewmodels:MultipleOptionsviewmodel}"> <GroupBox header="{Binding Title}"> <ItemsControl ItemsSource="{Binding Options}" /> </GroupBox></DataTemplate><DataTemplate DataType="{x:Type viewmodels:Optionviewmodel}"> <CheckBox IsChecked="{Binding IsChecked}" Content="{Binding name}" margin="6,3,0" /></DataTemplate>
样式:
<Style targettype="{x:Type ContentControl}"> <Style.Triggers> <Trigger Property="ValIDation.HasError" Value="true"> <Setter Property="tooltip" Value="{Binding relativeSource={x:Static relativeSource.Self},Path=(ValIDation.Errors)[0].ErrorContent}" /> </Trigger> </Style.Triggers> <Setter Property="ValIDation.ErrorTemplate"> <Setter.Value> <ControlTemplate> <GrID> <GrID.ColumnDeFinitions> <ColumnDeFinition WIDth="90*" /> <ColumnDeFinition WIDth="20" /> </GrID.ColumnDeFinitions> <border borderBrush="Red" borderThickness="1" CornerRadius="2.75" GrID.Column="0"> <AdornedElementPlaceholder GrID.Column="0" /> </border> <TextBlock Foreground="Red" GrID.Column="1" margin="0" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="left" x:name="txtError"> * </TextBlock> </GrID> </ControlTemplate> </Setter.Value> </Setter></Style>解决方法
What do I have to do,to make the ContentControl work together with
IDataErrorInfo and check the valIDity when a check Box is checked or
unchecked?
添加一点Rachels回答.
使用异步数据验证更容易解决此问题,但遗憾的是,这在WPF 4.5 is released之前不可用.
内容绑定到Mainviewmodel中的GeneralinvoiceTypes.由于我们不能进行异步数据验证,因此必须为GeneralinvoiceTypes引发PropertyChanged以进行验证.这可行,但我会采用Rachel建议的方法,并在MultipleOptionsviewmodel中引入另一个名为IsValID的属性
可以从Tag(或附加属性)到GeneralinvoiceTypes.IsValID完成对IsValID的绑定.当在任何选项中更改IsChecked时,我们还必须在MultipleOptionsviewmodel中得到通知.例如,可以通过在CheckBoxes中使用命令绑定来完成此 *** 作.
因此,需要沿着以下几行进行一些更改.
我还上传了一个示例项目,在此实现:https://www.dropbox.com/s/fn8e4n4s68wj3vk/ContentControlValidationTest.zip?dl=0
ContentControl中
<ContentControl Content="{Binding Path=GeneralinvoiceTypes}" Tag="{Binding Path=GeneralinvoiceTypes.IsValID,ValIDatesOnDataErrors=True}" />
Optionviewmodel DataTemplate
<DataTemplate DataType="{x:Type viewmodels:Optionviewmodel}"> <CheckBox IsChecked="{Binding IsChecked}" Content="{Binding name}" Command="{Binding relativeSource={relativeSource AncestorType={x:Type ContentControl}},Path=DataContext.IsValIDCheckCommand}" margin="6,0" /></DataTemplate>
MultipleOptionsviewmodel
private ICommand m_isValIDCheckCommand;public ICommand IsValIDCheckCommand{ get { return m_isValIDCheckCommand ?? (m_isValIDCheckCommand = new RelayCommand(param => IsValIDCheck())); }}private voID IsValIDCheck(){ IsValID = CheckIsValID();}private bool CheckIsValID(){ foreach (Optionviewmodel option in Options) { if (option.IsChecked == true) { return true; } } return false;}private bool m_isValID;public bool IsValID{ get { return m_isValID; } set { m_isValID = value; OnPropertyChanged("IsValID"); }}public string this[string columnname]{ get { if (columnname == "IsValID") { if (IsValID == false) { return "At least 1 Option must be selected"; } } return string.Empty; }}总结
以上是内存溢出为你收集整理的c# – ContentControl中的GroupBox – 支持由绑定到ContentControl的内容实现的IDataErrorInfo全部内容,希望文章能够帮你解决c# – ContentControl中的GroupBox – 支持由绑定到ContentControl的内容实现的IDataErrorInfo所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)