我在我的应用程序中使用 Catel。我对 DataObjects 和 ViewModels 有任何疑问 - 使用 Catel 高效的最佳方法是什么?
场景一:
我有一个 MainViewModel 和一个 MainView。在这个视图中,我用自己的视图模型 (SettingsViewModel) 调用另一个视图 (DataWindow) 并在对话框中显示它。在此对话框中,我插入一些 SettingsValues 并将其存储在 xml 中。最后但同样重要的是,我有一个 DataObject 类来存储对话框中的数据。这里有任何伪代码:
MainViewModel : ViewModelBase
{
private void OnSystemSettingsCommandExecute()
{
//create a new ViewModel and show as Dialog
uiVisualizerService.ShowDialog(new SystemSettingsViewModel());
}
...
}
SystemSettingsViewModel : ViewModelBase
{
/// <summary>
/// Gets or sets the property value.
/// </summary>
[Model]
public SettingsDataObject SettingsData
{
get { return GetValue<SettingsDataObject>(SettingsDataProperty); }
set { SetValue(SettingsDataProperty, value); }
}
/// <summary>
///
/// </summary>
public static readonly PropertyData SettingsDataProperty = RegisterProperty("SettingsData", typeof(SettingsDataObject));
/// <summary>
/// It is right to define the property again here?
/// </summary>
[ViewModelToModel("SettingsData")]
public string UserName
{
get { return GetValue<string>(UserNameProperty); }
set { SetValue(UserNameProperty, value); }
}
/// <summary>
/// Register the UserName property so it is known in the class.
/// </summary>
public static readonly PropertyData UserNameProperty = RegisterProperty("UserName", typeof(string));
// Load and Save right here?
protected override bool Save()
{
SettingsData.Save(@"D:\Projects\Testdata\xml\Settings.xml");
return true;
}
protected override void Initialize()
{
SettingsData = SavableModelBase<SettingsDataObject>.Load(@"D:\Projects\Testdata\xml\Settings.xml", SerializationMode.Xml);
}
}
public class SettingsDataObject : SavableModelBase<SettingsDataObject>
{
// Propertys
/// <summary>
/// Gets or sets the property value.
/// </summary>
public string UserName
{
get { return GetValue<string>(UserNameProperty); }
set { SetValue(UserNameProperty, value); }
}
/// <summary>
/// Register the UserName property so it is known in the class.
/// </summary>
public static readonly PropertyData UserNameProperty = RegisterProperty("UserName", typeof(string), "MyUserName");
}
- 我必须在 DataClass 和 ViewModel 类中定义属性“UserName”是否正确?这是我在 ViewModel 中定义我的 Model 属性并使用 [ViewModelToModel("SettingsData")] 访问我的数据属性的“正常方式”吗?
- 如何自动加载和保存我的数据对象?在我的情况下,我覆盖了“保存”和“初始化”方法?在 Catel 有没有更好的方法来做到这一点?
- 现在我必须可以访问 MainViewModel 中的 SettingsDataObject,但我没有找到在其他 ViewModel 中使用该对象的方法。在其他 ViewModel 中加载设置的“最佳实践”是什么?