WPF MVVM命令:多个命令参数

时间:2011-03-19 22:31:24

标签: c# .net wpf mvvm icommand

也许我的问题是架构而不是功能,但我试图将TextBox绑定到命令,并且在该命令中,我想传递多个参数(即自定义对象)。不确定如何以声明方式(xaml)执行此操作。

ViewA(位于ViewModelA之上) 它有一个TextBox,绑定到 CommandX

ViewB(位于ViewModelB之上) (这实际上是与ViewA在同一窗口中的另一个用户控件) 当commandX触发时,ViewModelB需要执行一些方法。 ViewModelB需要先使用多个属性进行更新,然后才能执行该方法。

我的问题是,我如何构建我的命令/架构,以便ViewModelB有足够的信息来执行它的方法。

旁注:ViewModelA具有ViewModelB执行其方法的所有必要信息。但是,我不想从那里得到它,因为后来我想要从不同的视图执行CommandX

更新

似乎我可以单独设置CommandParameter属性,这可能绑定到ViewModelA中的复杂类型。这应该足以将所有必要的属性填充到其中。

真棒

这工作得很好!这是我的parmeter属性在ViewA上的样子

    public ExecuteQueryCommandParameters ExecuteQueryParameters {
        get {
            var p = new ExecuteQueryCommandParameters();
            p.AllColumns = ColumnsMaster;
            p.DatabaseName = SelectedDatabase;
            p.ServerName = SelectedServer;
            p.TopRows = 20;
            p.ViewModelName = "MainDataView";

            return p;
        }
    }

和按钮实现

<Button Command="{Binding ExecuteQuery}" CommandParameter="{Binding ExecuteQueryParameters}">Top 20</Button>

更新

这个解决方案有一个小路障。 commandparameter绑定到属​​性。但它在加载时检索它,而不是在命令执行时检索它。我需要它在命令执行时发生,以便所有属性都具有最新值。关于如何实现这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

我将如何做到这一点:

对于这个解释,我假设所有必要的信息都在一个类中,称为“MyCustomCommandParameters”。

我还假设您的XAML将主要父控件的数据绑定到ViewModelA。

让ViewModelA公开MyCustomCommandParameters类型的属性。

然后,在ViewB上,创建一个MyCustomCommandParameters类型的DependencyProperty。 此属性的处理程序将此信息传递给ViewModelB。

在XAML中,将ViewB的“MyCustomCommandParameters”值绑定到ViewModelA的“MyCustomCommandParameters”属性。

这是一次性的一次性管道工作,但是你会实现你的目标,即通过XAML绑定将信息从ViewModelA传递给ViewModelB,这两个模型不会彼此了解。