アプリケーションで Catel を使用しています。DataObjects と ViewModels について質問があります - Catel の効率的な使用方法は何ですか?
シナリオ 1:
MainViewModel と MainView があります。このビューでは、独自のビューモデル (SettingsViewModel) を持つ別のビュー (データウィンドウ) を呼び出し、それをダイアログに表示します。このダイアログで、いくつかの SettingsValues を挿入し、それを xml に保存します。最後になりましたが、Dialog からのデータを格納するための 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に設定をロードするための「ベストプラクティス」は何ですか?