也许我的问题更多是关于架构而不是功能,但我正在尝试将一个TextBox绑定到一个命令,并且在该命令中,我想传递多个参数(即自定义对象)。不确定如何以声明性方式(xaml)实现这一点。
ViewA(位于ViewModelA之上)有一个TextBox,它绑定到CommandX。
ViewB(位于ViewModelB之上)(实际上是同一个窗口中的另一个用户控件) 当CommandX触发时,ViewModelB需要执行一些方法。在执行该方法之前,ViewModelB需要更新多个属性。
我的问题是,如何构建我的命令/架构,以便ViewModelB拥有足够的信息来执行其方法。
顺便说一下:ViewModelA具有ViewModelB执行其方法所需的所有必要信息。但是,我不想从那里获取它,因为稍后我希望从不同的视图执行CommandX。
更新
似乎我可以单独设置CommandParameter属性,这可能会绑定到ViewModelA中的复杂类型。这应该足以将所有必要的属性放入其中。
太棒了!
这起作用了!以下是ViewA上我的参数属性长什么样子:
和按钮实现相关
ViewA(位于ViewModelA之上)有一个TextBox,它绑定到CommandX。
ViewB(位于ViewModelB之上)(实际上是同一个窗口中的另一个用户控件) 当CommandX触发时,ViewModelB需要执行一些方法。在执行该方法之前,ViewModelB需要更新多个属性。
我的问题是,如何构建我的命令/架构,以便ViewModelB拥有足够的信息来执行其方法。
顺便说一下:ViewModelA具有ViewModelB执行其方法所需的所有必要信息。但是,我不想从那里获取它,因为稍后我希望从不同的视图执行CommandX。
更新
似乎我可以单独设置CommandParameter属性,这可能会绑定到ViewModelA中的复杂类型。这应该足以将所有必要的属性放入其中。
太棒了!
这起作用了!以下是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绑定到属性,但它在加载时检索属性,而不是在执行命令时检索属性。我需要在命令执行时检索属性,以便所有属性都具有最新值。你有任何实现这个目标的想法吗?