c# - 如何创建具有只能具有特定值的属性的对象

标签 c# wpf vb.net oop mvvm

最初它对我来说看起来是一个简单的问题,但我越想越困惑,什么是实现我想要的最佳方法。

我们正在制作 WPF申请以下 MVVM
所以场景是 -

我们有一个类说MyClass具有 Complex 类型的属性,它还有一个名为 Category 的属性类型 int .

Public Class MyClass

    Public Property Category As Integer
    Public Property MyProperty As Complex

End Class

现在MyProperty只能根据其类别具有一定的值。
我们有一个对象列表,其中包含针对每个类别的 MyProperty 的所有可能值。

我的问题是考虑 MVVM,这个可能的项目列表放在哪里?
我们是否应该让它成为对象的一部分,就像一个具有所有可能值的新属性 MyProperty然后在我们设置属性时进行检查?或者别的地方 ?
Public Property AvailablePropertyValues As IEnumerable(Of Complex)

当我们将此对象绑定(bind)到 View 时,将其保存在对象中变得非常简单,因为我们不必过滤列表,但我知道为每个项目过滤列表是微不足道的,我们不应该在建模对象时考虑创建 View 的简易性.

关于如何为我的对象建模的任何想法?

最佳答案

我认为您应该让屏幕上显示的所有数据都通过绑定(bind)来自 View 模型,其中包括您要从中选择的可能选择以及实际选择的值,然后通过 setter 进行验证(这就是我所看到的setter 用于插入基于输入值的自定义验证逻辑)或更好,通过实现 IValidatableObject 接口(interface),因此您还可以有无效值的 UI 通知。

对于 IValidatableObject,您可以查看主题 http://weblogs.asp.net/scottgu/class-level-model-validation-with-ef-code-first-and-asp-net-mvc-3http://msprogrammer.serviciipeweb.ro/2012/03/19/ivalidatableobject-and-idataerrorinfo/

关于c# - 如何创建具有只能具有特定值的属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36310087/

相关文章:

c# - 将 CSV 字符串反序列化为 C# 对象

c# - MVVM检测子类的属性变化

c# - 什么是NullReferenceException,如何解决?

vb.net - 使用BackgroundWorker 通过FileSystemWatcher 更新主窗体UI?

c# - caliburn.micro 将元素可见性绑定(bind)到 View 模型的函数而不是属性

c# - 如何在具有相同目的的同一解决方案中为 C# 和 VB.NET 项目提供有意义的名称?

c# - 开始使用 protobuf-net

c# - 在 ASP.Net Core 中请求内容解压

c# - 将一堆位图转储为 PDF 的最快的 .Net PDF 库是什么?

c# - 将 WinForms 窗体设置为 WPF 窗口的所有者