IDialogServiceアプローチのフォローアップ:
System.Windows.MessageBoxResult
列挙型はどうですか?それをインターフェースから遠ざけ、実装にのみ関与させるためのより良いアプローチはありますか?
System.Windows.MessageBoxResult
私が列挙型に選んだアプローチ:
はい、いいえ、わかりました、キャンセルをカバーする列挙型をIDialogInterfaceの横に追加しました:
namespace Foo.Bar.Dialogs
{
public enum DialogResult { Ok, Yes, No, Cancel }
public interface IDialogService
{
void ShowErrorBox(string error_message);
DialogResult ShowQuestionBox(string question_message);
DialogResult ShowQuestionBox(string question_message, string caption);
DialogResult ShowQuestionBox(string question_message, string caption, bool allow_cancel);
DialogResult ShowQuestionBox(string question_message, string caption, bool allow_cancel, bool show_as_error);
void ShowWarningBox(string message, string caption = "");
void ShowInformationBox(string message);
void ShowInformationBox(string message, string caption);
}
}
最初の質問:
すべてのコマンドを.asmx.csファイルから一部のアプリケーションのメインウィンドウのViewModelに移動する作業を行っています。
ここで、ユーザーに確認を求めるコマンドをどうするかを理解する必要があります。
今のところ、ViewModelで必要なタイプを吸い込んで、ダイアログボックスを直接起動します。私はこれがこれを行うための最良または最もクリーンな方法ではないと確信しています。
私はこの記事を面白くてよりクリーンなアプローチで見つけました。IDialogServiceインターフェイスを使用します。
public interface IDialogService
{
int Width { get; set; }
int Height { get; set; }
void Show(string title, string message, Action<DialogResult> onClosedCallback);
}
また、IDialogInterfaceを使用する前に、IDialogInterfaceがnullであるかどうかをチェックするため、この記事の方が優れているようです。
private void PerformAddNewCustomer()
{
CustomerList.Add(new Customer { Name = "Name" + i });
i++;
if (dialogService != null)
{
dialogService.Show("Customed added");
}
}
これは、ダイアログをViewModelから分離するための最良の方法ですか、それともさらに優れたアプローチがありますか?