每次新窗口作为CommandParameter

本文关键字:CommandParameter 窗口 新窗口 | 更新日期: 2023-09-27 18:07:25

我想要一个像这样的按钮来显示应用程序设置窗口:

<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每次命令被调用?

每次新窗口作为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}}"/>

相关文章:
  • 没有找到相关文章