私はstackoverflowを検索しましたが、与えられた答えが私のものに当てはまるとは思わないか、それらを適用する方法を理解できません。
ボグ標準のMVVM WPFアプリケーションがあります。MVVM パーツは、RelayCommand クラスと、ViewModelBase クラスおよび ViewModelBase を拡張する WorkspaceViewModel クラスで構成されます。
MainWindow と CustomMessageBox ウィンドウ (実際にはユーザーに質問と 2 つの回答を提供します) の 2 つのウィンドウがあります。MainWindow で次のコードを使用して、CustomMessageBox (2 番目のウィンドウ) を開きます。
public ICommand BrowseFileFolderCommand
{
get
{
if (_browseFileFolderCommand == null)
{
_browseFileFolderCommand = new RelayCommand(o =>
{
var messageViewModel = new MessageBoxViewModel("Add a Folder or File", "What do you wish to add, folder or file?", "Folder", "File");
var choice = new CustomMessageBox()
{
DataContext = messageViewModel
};
choice.ShowDialog();
if (messageViewModel.CustomMessageBoxDialogResult == DialogResult.Yes)
{
switch (messageViewModel.ChosenEntity)
{
case SelectedAnswer.Answer1:
// Get folder shizz
break;
case SelectedAnswer.Answer2:
// Get file shizz
break;
default:
break;
}
}
}, null);
}
return _browseFileFolderCommand;
}
}
CustomMessageBox が起動されると、CloseCommand で閉じることができません。CustomMessageBox の読み込みをデバッグしようとすると、何かを押す前にすべての ICommand が起動されているように見えますか?
WorkspaceViewModel には CloseCommand があります。
#region CloseCommand
/// <summary>
/// Returns the command that, when invoked, attempts
/// to remove this workspace from the user interface.
/// </summary>
public ICommand CloseCommand
{
get
{
if (_closeCommand == null)
_closeCommand = new RelayCommand(param => this.OnRequestClose());
return _closeCommand;
}
}
#endregion // CloseCommand
#region RequestClose [event]
/// <summary>
/// Raised when this workspace should be removed from the UI.
/// </summary>
public event EventHandler RequestClose;
void OnRequestClose()
{
EventHandler handler = this.RequestClose;
if (handler != null)
handler(this, EventArgs.Empty);
}
#endregion // RequestClose [event]
誰かアイデアはありますか?何か重要なことを忘れていませんか?
ありがとう、