MVVM Light 和 SQL Server CE 在 viewmodel 中生成代码
Posted
技术标签:
【中文标题】MVVM Light 和 SQL Server CE 在 viewmodel 中生成代码【英文标题】:MVVM Light and SQL Server CE generated code in viewmodel 【发布时间】:2013-02-25 19:26:13 【问题描述】:我只是在玩 MVVM Light,我想我已经明白了,但我遇到了问题。
我正在使用为我的数据库 (SQLCE) 生成类、映射等的 SQL Server CE 工具箱。其中一个表称为 Profile,我想将其用作我也可以绑定的属性。这是我的 ViewModel 代码
public class ProfileViewModel : ViewModelBase
private Profile profile; // Profile is the class created by SQLCE Toolbox for table mapping
public Profile UserProfile
get return profile;
set
profile = value;
RaisePropertyChanged("UserProfile");
public ProfileViewModel()
if (IsInDesignMode)
// Code runs in Blend --> create design time data.
UserProfile = new Profile()
Name = "NA",
Age = 22
else
// Code runs "for real"
UserProfile = GetProfile();
在 Expression blend 中,我可以看到 ViewModel 但看不到 Profile 属性,因此我猜测某处正在生成异常。
我确实尝试将混合作为一个过程附加,但没有出现错误。经过一点阅读,我发现混合无法连接到数据库,因此您必须在设计模式下弥补一些数据。我试过只是做UserProfile = new Profile()
,但我猜它仍在尝试使用数据库来创建它?
编辑: 好的,我认为我遇到的问题与使用 SQLCE 有关。如果我尝试使用 WPF 和 MS SQL 进行类似的操作,那么一切正常。
编辑 2: 这与数据库密切相关。如果我从上面的代码中删除公共属性 UserProfile,则可以从 Blend 中看到所有其他属性(我的代码中未显示)。如果我把它加回去,那么没有一个是可见的。那么我怎样才能让它变得可混合呢?
【问题讨论】:
只是一个注释。如果您在构造函数中分配profile
,则不必在字段声明中分配它。
是的,你的权利是不假思索地“抓住稻草”的尝试
【参考方案1】:
您必须使用Locator
机制。您可以在 MVVM 应用程序中默认看到它。
在设计模式下,您将提供Profile
对象的预构建版本,但在非设计模式下,Profile
对象将通过您的数据库提供。所以你不会直接使用new Profile()
,而是使用类似于Locator.ProvideMeWithUserProfile()
的东西。
例如,您可以查看this video 以了解实现它的方法。
【讨论】:
我看过他的另一个视频,看起来很相似,但我会仔细看看 如果它回答了您的问题,请标记为关闭线程。 那么如何创建预构建版本?类配置文件有 2 个属性,称为名称和年龄。你是说预建是当我做 profile = new Profile() Name = "NA";年龄 = 30; ?【参考方案2】:我注意到这里有几件事。
您将设计时数据(和非设计时间)分配给支持字段,而不是属性,因此您的 RaisePropertyChanged() 不会被调用。如果属性更改,这将阻止视图更新,但您仍然应该“有权访问”该属性。可能不是问题,因为这发生在构造函数中。
另外,在您的文字中,您一直在谈论 Profile 属性,但该属性实际上称为 UserProfile。
【讨论】:
以上是关于MVVM Light 和 SQL Server CE 在 viewmodel 中生成代码的主要内容,如果未能解决你的问题,请参考以下文章