c# – 在组合框中实现IDataErrorInfo
我在使用IDataErrorInfo验证ComboBox时遇到问题.
我设置了1个文本框和1个组合框,在运行程序时,第一个焦点在文本框上,当我按Tab键聚焦在我得到的组合框中时:
为了帮助你在这里帮助我,我的XAML的一部分: <Window.DataContext> <ViewModels:MainWindowViewModel/> </Window.DataContext> <!-- Batch ID--> <Label Content="Batch ID" Height="28" Margin="64,52,191,0" VerticalAlignment="Top" /> <TextBox Name="txtBatchId" Text="{Binding BatchId,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" Margin="124,65,0" TabIndex="1" Height="26" VerticalAlignment="Top" /> <!-- Product --> <Label Content="Product" Height="28" Margin="54,81,0" VerticalAlignment="Top" /> <ComboBox Name="cmbProduct" ItemsSource="{Binding Products}" DisplayMemberPath="ProductName" SelectedValuePath="ProductId" SelectedValue="{Binding SelecteProductId,ValidatesOnDataErrors=True}" Height="23" Margin="124,0" VerticalAlignment="Top" TabIndex="2" /> 这是用于数据绑定组合框的ProductModel.cs: public class ProductModel { public int ProductId {get;set;} public int ProductName {get;set;} public ProductModel(int prodId,string prodName) { ProductId = prodIdl; ProductName = prodName; } } 这是实现INotifyPropertyChanged和IDataErrorInfo的MainWindowViewModel.cs: public class MainWindowViewModel : ViewModelBase,IDataErrorInfo { private string _batchId; public string BatchId { get { return _batchId; } set { _batchId = value; OnPropertyChanged("BatchId"); } } private ObservableCollection<Product> _products = new ObservableCollection<Product>(); public IEnumerable<Product> Products { get { return _products; } } private string _selectedProductId; public string SelectedProductId { get { return _selectedProductId; } set { _selectedProductId = value; OnPropertyChanged("SelectedProductId"); } } public void PopulateProduct() { .... } public MainWindowViewModel() { PopulateProduct(); } public string this[string columnName] { get { string result = string.Empty; switch (columnName) { case "SelectedProductId": if (SelectedProductId == null || SelectedProductId == "0") { result = "Please select a product"; } break; case "BatchId": if (string.IsNullOrWhitespace(BatchId)) { result = "Please input batch id"; } break; } return result; } } public string Error { get; private set; } } 任何帮助将受到高度赞赏.请让我知道我可以添加的任何内容,以使其更清晰. 解决方法
我之前遇到过同样的问题,起初我怀疑我与ComboBox SelectedValue的绑定导致了问题.我尽力调试程序,但没有帮助.直到我发现问题/错误在mahApps上.以下是解决问题的一些步骤:
>在项目中卸载/删除mahApps.重新构建您的项目,让我们看看您是否仍然遇到相同的错误. 1.1.如果问题仍然存在,请转到步骤2,如果不继续步骤1.2. 1.2.如果通过删除mahApps来解决问题,您可以选择其他布局包. :))或者如果你真的想使用mahApps.请忽略第一步. 2继续步骤no. 3 <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,/MahApps.Metro;component/Styles/Colors.xaml" /> <ResourceDictionary Source="pack://application:,/MahApps.Metro;component/Styles/Fonts.xaml" /> <ResourceDictionary Source="pack://application:,/MahApps.Metro;component/Styles/Controls.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> >重新构建您的应用程序,让我们看看您有什么. 简短回答: 希望有所帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |