gpt4 book ai didi

c# - 使用 Entity Framework 在 WPF MVVM 中进行验证

转载 作者:行者123 更新时间:2023-11-30 16:03:46 25 4
gpt4 key购买 nike

我正在使用 Visual Studio 2015 编写一个 WPF MVVM Light 应用程序。数据是使用 Entity Framework 6 引入的,使用数据库优先来生成模型。在我的 MainViewModel.cs 文件中,我想在执行 SaveChanges() 之前验证数据.

我看到的示例讨论了如何向模型添加注释(例如,this);但是,我使用的是自动生成的 Entity Framework 模型。我的 ViewModels 引用 ObservableCollection<Employee>对象——没有任何内容直接引用字段,因此我可以在它们上添加注释。

这是 SearchResults属性,它保存从 EF 返回的结果:

private ObservableCollection<Employee> _searchResults;
public ObservableCollection<Employee> SearchResults
{
get { return _searchResults; }
set
{
if (_searchResults == value) return;

_searchResults = value;
RaisePropertyChanged("SearchResults");
}
}

SearchResults在搜索后填充并绑定(bind)到 DataGrid:

var query = Context.Employees.AsQueryable();

// Build query here...

SearchResults = new ObservableCollection<Employee>(query.ToList());

用户单击 DataGrid 上的一行,我们会显示详细信息供他们更新。然后他们可以点击保存按钮。但是我们想验证每个 Employee 中的字段表演前 Context.SaveChanges() .

这是部分类的相关区域 Employee ,由 Entity Framework 自动生成:

public int employeeID { get; set; }
public int securityID { get; set; }
public string firstName { get; set; }
public string middleName { get; set; }
public string lastName { get; set; }
public string suffix { get; set; }
public string job { get; set; }
public string organizationalUnit { get; set; }
public string costCenter { get; set; }
public string notes { get; set; }
public System.DateTime createdDate { get; set; }

例如,securityID不得为空且必须为 int , 而 firstNamelastName是必需的,等等。您如何完成此验证并向用户显示错误?

最佳答案

我假设当您向用户显示您正在使用 TextBoxes 的详细信息时(您可以对其他控件应用相同的解决方案)。

不是在用户更改 Employee 的属性后验证数据,而是预先验证,如果属性无效,甚至不要更改属性。

您可以使用 ValidationRule 类轻松完成此操作。例如:

<ListBox ItemsSource="{Binding Employees}" Name="ListBoxEmployees">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBox>
<TextBox.Text>
<Binding ElementName="ListBoxEmployees" Path="SelectedItem.Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<stackOverflow:NotEmptyStringValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>

和验证规则:

public class NotEmptyStringValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string s = value as string;
if (String.IsNullOrEmpty(s))
{
return new ValidationResult(false, "Field cannot be empty.");
}

return ValidationResult.ValidResult;
}
}

您还可以在任何验证规则失败时禁用“保存”按钮。

关于c# - 使用 Entity Framework 在 WPF MVVM 中进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36071418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com