C# MVVM Light和SQL Server CE在viewmodel中生成的代码
我只是在玩MVVM Light,我想我已经想好了,但我有一个问题 我正在使用SQLServerCE工具箱,它为我的数据库(SQLCE)生成类、映射等。表的一个属性名为Profile,我想将它用作我也可以绑定的属性。下面是我的ViewModel代码C# MVVM Light和SQL Server CE在viewmodel中生成的代码,c#,windows-phone-7,sql-server-ce,mvvm-light,C#,Windows Phone 7,Sql Server Ce,Mvvm Light,我只是在玩MVVM Light,我想我已经想好了,但我有一个问题 我正在使用SQLServerCE工具箱,它为我的数据库(SQLCE)生成类、映射等。表的一个属性名为Profile,我想将它用作我也可以绑定的属性。下面是我的ViewModel代码 public class ProfileViewModel : ViewModelBase { private Profile profile; // Profile is the class created by SQLCE Toolbox
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属性,所以我猜某个地方正在生成异常
我确实尝试将blend作为一个过程附加,但没有出现错误。经过一点阅读,我发现blend无法连接到数据库,因此在DesignMode中必须生成一些数据。我试着只做UserProfile=newprofile()
,但我猜它仍然在尝试使用数据库来创建它
编辑:
好的,我认为我遇到的问题与使用SQLCE有关。如果我尝试与WPF和MS SQL类似的东西,那么一切都很好
编辑2:
这与数据库密切相关。如果我从上面的代码中删除公共属性UserProfile,那么可以从Blend中看到所有其他属性(代码中未显示)。如果我把它加回去,就看不见了。那么如何使其可混合呢?您必须使用
定位器
机制。默认情况下,您可以在MVVM应用程序中看到它
在设计模式下,您将提供配置文件
对象的预构建版本,但在非设计模式下,将通过数据库提供配置文件
对象。因此,您不会直接使用newprofile()
,而是使用类似于Locator.providedemewithuserprofile()的内容
例如,您可以查看一种实现方法。您必须使用定位器
机制。默认情况下,您可以在MVVM应用程序中看到它
在设计模式下,您将提供配置文件
对象的预构建版本,但在非设计模式下,将通过数据库提供配置文件
对象。因此,您不会直接使用newprofile()
,而是使用类似于Locator.providedemewithuserprofile()的内容
例如,你可以看看实现它的方法。我注意到这里有几件事
您正在将设计时数据(和非设计时)分配给备份字段,而不是属性,因此不会调用RaisePropertyChanged()。如果属性发生更改,这将阻止视图更新,但您仍应“有权”访问该属性。这可能不是问题,因为这是在构造函数中发生的
另外,在您的文本中,您一直在谈论Profile属性,但该属性实际上被称为UserProfile。我注意到这里有几件事
您正在将设计时数据(和非设计时)分配给备份字段,而不是属性,因此不会调用RaisePropertyChanged()。如果属性发生更改,这将阻止视图更新,但您仍应“有权”访问该属性。这可能不是问题,因为这是在构造函数中发生的
此外,在您的文本中,您一直在谈论Profile属性,但该属性实际上被称为UserProfile。请注意。如果你在构造函数中分配profile
,你不必在字段声明中分配它。是的,你的权利,那是一次“抓住稻草”的尝试,没有考虑任何注释。如果你在构造函数中分配profile
,你不必在字段声明中分配它。是的,你的权利是“抓住稻草”尝试而不思考我看到了他的另一个视频,看起来很相似,但我会仔细看一看如果它回答了你的问题,请标记作为答案关闭线程。那么你如何创建预构建版本?类配置文件有两个名为Name和Age的属性。你是说当我做profile=new profile(){Name=“NA”;Age=30;}时,是预构建的吗?我看到了他的另一个视频,看起来很相似,但我会仔细看一看。如果它回答了你的问题,请标记作为关闭线程的答案。那么你如何创建预构建版本呢?类配置文件有两个名为Name和Age的属性。你是说当我做profile=newprofile(){Name=“NA”;Age=30;}时,预构建就是这样吗?