You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF PRISM中向UserControl传多参数遇格式异常的优化方案

问题

在C# WPF应用中使用PRISM框架,UserControl继承自IDialogAware接口。尝试从MainWindowViewModel向UserControlViewModel传递多个参数时,调用OnDialogOpened方法获取parameter1时抛出System.FormatException——parameters.GetValue("parameter1")返回的值为"false, parameter2=False"。目前可通过substring()临时解决,希望找到更优实现方式。

MainWindowViewModel 代码:

_dialogService.ShowDialog("SecondUserControl", 
        new DialogParameters($"parameter1={parameter1}, parameter2={parameter2}"), r =>
        {});

UserControlViewModel 代码:

public void OnDialogOpened(IDialogParameters parameters)
{
  var parameter1 = parameters.GetValue<bool>("parameter1");
  var parameter2 = parameters.GetValue<bool>("parameter2");
}

解决方案

问题根源在于你用字符串拼接构造DialogParameters,当参数值包含逗号等特殊字符时,PRISM的参数解析逻辑会出错,把整个拼接字符串当成第一个参数的值。推荐两种可靠的传递方式:

方式1:使用DialogParameters.Add逐个添加参数

这是PRISM官方推荐的方式,完全避免字符串拼接带来的解析问题:

var parameters = new DialogParameters();
parameters.Add("parameter1", parameter1);
parameters.Add("parameter2", parameter2);

_dialogService.ShowDialog("SecondUserControl", parameters, r => {});

方式2:使用匿名对象初始化DialogParameters

PRISM支持直接传入匿名对象,内部会自动解析为键值对参数,代码更简洁:

_dialogService.ShowDialog("SecondUserControl", 
        new DialogParameters(new { parameter1, parameter2 }), r =>
        {});

两种方式都能让OnDialogOpened方法中通过GetValue<bool>正常获取到正确的参数值,无需额外字符串处理。

内容的提问来源于stack exchange,提问作者MaxB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:52:07