首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每次新窗口为CommandParameter

每次新窗口为CommandParameter
EN

Stack Overflow用户
提问于 2015-08-11 19:37:16
回答 1查看 672关注 0票数 2

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

代码语言:javascript
复制
<Window.Resources>
    <local:SettingsWindow x:Key="SettingsWnd"/>
</Window.Resources>
<Window.DataContext>
    <local:MyViewModel/>
</Window.DataContext>
<Button Command="{Binding ShowSettingsCommand}"
    CommandParameter="{DynamicResource SettingsWnd}"/>

ViewModel之类的东西:

代码语言:javascript
复制
class MyViewModel : BindableBase
{
    public MyViewModel()
    {
        ShowSettingsCommand = new DelegateCommand<Window>(
                w => w.ShowDialog());
    }

    public ICommand ShowSettingsCommand
    {
        get;
        private set;
    }
}

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

是否有方法在每次调用命令时以CommandParameter的形式传递新窗口?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 20:02:09

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

代码语言:javascript
复制
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();
    }
}

..。

代码语言:javascript
复制
<Window.Resources>
    <local:SettingsWindow x:Key="SettingsWnd"/>
    <local:InstanceFactoryConverter x:Key="InstanceFactoryConverter"/>
</Window.Resources>

..。

代码语言:javascript
复制
<Button Command="{Binding ShowSettingsCommand}"
    CommandParameter="{Binding Source={StaticResource SettingsWnd}, Converter={StaticResource InstanceFactoryConverter}}"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31950480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档