c# - 每次新窗口作为命令参数

标签 c# wpf xaml commandparameter

我想要一个按钮来显示应用程序设置窗口,如下所示:

<Window.Resources>
    <local:SettingsWindow x:Key="SettingsWnd"/>
</Window.Resources>
<Window.DataContext>
    <local:MyViewModel/>
</Window.DataContext>
<Button Command="{Binding ShowSettingsCommand}"
    CommandParameter="{DynamicResource SettingsWnd}"/>

ViewModel 有点东西:

class MyViewModel : BindableBase
{
    public MyViewModel()
    {
        ShowSettingsCommand = new DelegateCommand<Window>(
                w => w.ShowDialog());
    }

    public ICommand ShowSettingsCommand
    {
        get;
        private set;
    }
}

问题是它只能工作一次,因为您无法重新打开以前关闭的窗口。显然,上面的 XAML 不会像这样打开新实例。

有没有办法在每次调用命令时将新窗口作为 CommandParameter 传递?

最佳答案

这个转换器能解决您的问题吗?

class InstanceFactoryConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var type = value.GetType();

        return Activator.CreateInstance(type);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

...

<Window.Resources>
    <local:SettingsWindow x:Key="SettingsWnd"/>
    <local:InstanceFactoryConverter x:Key="InstanceFactoryConverter"/>
</Window.Resources>

...

<Button Command="{Binding ShowSettingsCommand}"
    CommandParameter="{Binding Source={StaticResource SettingsWnd}, Converter={StaticResource InstanceFactoryConverter}}"/>

关于c# - 每次新窗口作为命令参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31950480/

相关文章:

c# - 如何在 WPF 中改变 Canvas 的位置?

c# - 如何在弹出窗口周围添加阴影

wpf - 在 ConverterParameter 中使用字典中的字符串

c# - 使用 Autofac 解析通用抽象类的所有派生类

c# - 绑定(bind) Loaded 事件?

c# - 如何在 C# 中一次分配多个对象属性?

C# WPF RichText Box BackgroundProperty 从文件读取时返回 null

c# - Dispatcher.Invoke 是否在调用线程上阻塞?

c# - 在设置和部署中预编译网站

c# - 尝试在 Redis 的 2 组中插入 750 个项目时出现 StackExchange TimeoutException