Я использую Catel в своем приложении. У меня есть вопросы относительно DataObjects и ViewModels — как лучше всего использовать Catel?
Сценарий 1:
У меня есть MainViewModel и MainView. В этом представлении я вызываю другое представление (DataWindow) с собственной ViewModel (SettingsViewModel) и показываю его в диалоговом окне. В этом диалоговом окне я вставляю некоторые значения настроек и сохраняю их в 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");
}
- Правильно ли я должен определить свойство «UserName» в классе DataClass и в классе ViewModel? Это «обычный способ», когда я определяю свойство модели в ViewModel, а затем получаю доступ к своим свойствам данных с помощью [ViewModelToModel («SettingsData»)]?
- Как я могу автоматически загружать и сохранять свои объекты данных? В моем случае я переопределяю метод «Сохранить» и «Инициализировать»? Есть ли лучший способ сделать это в Catel?
- Теперь у меня должен быть доступ к SettingsDataObject в MainViewModel, но я не нашел способа использовать объект в других ViewModels. Каковы «лучшие методы» загрузки настроек в другие ViewModels?