DialogService 在 ShowDialog 中将对象作为参数传递
DialogService pass Object as parameter in ShowDialog
我想在 Prism WPF 中打开一个对话框。在我的 ViewModel 中执行一个名为 ExecuteOpenDialog
的命令,它会得到一个名为 soItem
的 CommandParameter
。我想将此参数传递给我的对话框。
private void ExecuteOpenDialog(SOItem soItem)
{
System.Diagnostics.Debug.WriteLine(soItem.Name);
ShowDialog(soItem);
}
看起来 DialogParameters
只是 string
?是吗?
private void ShowDialog(SOItem soItem)
{
var message = msg;
//using the dialog service as-is
_dialogService.ShowDialog(typeof(DialogWindow).Name, new DialogParameters(soItem), r =>
{
if (r.Result == ButtonResult.None)
Title = "Result is None";
else if (r.Result == ButtonResult.OK)
Title = "Result is OK";
else if (r.Result == ButtonResult.Cancel)
Title = "Result is Cancel";
else
Title = "I Don't know what you did!?";
});
}
知道如何将我的 SOItem
作为参数传递到我的对话框吗?
首先,创建一个 DialogParameters
实例并使用 Add
方法添加带有密钥的 soItem
。构造函数 DialogParameters
是一个 查询 ,您只能在其中添加字符串值。
private void ShowDialog(SOItem soItem)
{
var message = msg;
//using the dialog service as-is
var dialogParameters = new DialogParameters();
dialogParameters.Add("MyItem", soItem);
_dialogService.ShowDialog(typeof(DialogWindow).Name, dialogParameters, r =>
{
if (r.Result == ButtonResult.None)
Title = "Result is None";
else if (r.Result == ButtonResult.OK)
Title = "Result is OK";
else if (r.Result == ButtonResult.Cancel)
Title = "Result is Cancel";
else
Title = "I Don't know what you did!?";
});
}
或者,您可以使用集合初始化器来添加键值对。
var dialogParameters = new DialogParameters
{
{"MyItem", soItem}
};
在对话视图模型中实现 IDialogAware
接口。打开对话框时会触发 OnDialogOpened
覆盖。在那里,您可以使用索引器 parameters["MyItem"]
(returns 和 object
)或将项目转换为所需类型的通用 GetValue<T>
方法获取对话框参数。
public class MyDialogViewModel : BindableBase, IDialogAware
{
// ...other code, overrides, properties.
private SOItem _soItem;
public SOItem SOItem
{
get => _soItem;
set => SetProperty(ref _soItem, value);
}
public virtual void OnDialogOpened(IDialogParameters parameters)
{
SOItem = parameters.GetValue<SOItem>("MyItem");
}
}
我想在 Prism WPF 中打开一个对话框。在我的 ViewModel 中执行一个名为 ExecuteOpenDialog
的命令,它会得到一个名为 soItem
的 CommandParameter
。我想将此参数传递给我的对话框。
private void ExecuteOpenDialog(SOItem soItem)
{
System.Diagnostics.Debug.WriteLine(soItem.Name);
ShowDialog(soItem);
}
看起来 DialogParameters
只是 string
?是吗?
private void ShowDialog(SOItem soItem)
{
var message = msg;
//using the dialog service as-is
_dialogService.ShowDialog(typeof(DialogWindow).Name, new DialogParameters(soItem), r =>
{
if (r.Result == ButtonResult.None)
Title = "Result is None";
else if (r.Result == ButtonResult.OK)
Title = "Result is OK";
else if (r.Result == ButtonResult.Cancel)
Title = "Result is Cancel";
else
Title = "I Don't know what you did!?";
});
}
知道如何将我的 SOItem
作为参数传递到我的对话框吗?
首先,创建一个 DialogParameters
实例并使用 Add
方法添加带有密钥的 soItem
。构造函数 DialogParameters
是一个 查询 ,您只能在其中添加字符串值。
private void ShowDialog(SOItem soItem)
{
var message = msg;
//using the dialog service as-is
var dialogParameters = new DialogParameters();
dialogParameters.Add("MyItem", soItem);
_dialogService.ShowDialog(typeof(DialogWindow).Name, dialogParameters, r =>
{
if (r.Result == ButtonResult.None)
Title = "Result is None";
else if (r.Result == ButtonResult.OK)
Title = "Result is OK";
else if (r.Result == ButtonResult.Cancel)
Title = "Result is Cancel";
else
Title = "I Don't know what you did!?";
});
}
或者,您可以使用集合初始化器来添加键值对。
var dialogParameters = new DialogParameters
{
{"MyItem", soItem}
};
在对话视图模型中实现 IDialogAware
接口。打开对话框时会触发 OnDialogOpened
覆盖。在那里,您可以使用索引器 parameters["MyItem"]
(returns 和 object
)或将项目转换为所需类型的通用 GetValue<T>
方法获取对话框参数。
public class MyDialogViewModel : BindableBase, IDialogAware
{
// ...other code, overrides, properties.
private SOItem _soItem;
public SOItem SOItem
{
get => _soItem;
set => SetProperty(ref _soItem, value);
}
public virtual void OnDialogOpened(IDialogParameters parameters)
{
SOItem = parameters.GetValue<SOItem>("MyItem");
}
}