也许我的问题更多的是架构而不是功能,但是我正在尝试将 TextBox 绑定到命令,并且在该命令中,我想传递多个参数(即自定义对象)。不确定如何以声明性方式(xaml)执行此操作。
ViewA(位于 ViewModelA 之上) 它有一个 TextBox,它绑定到CommandX
ViewB(位于 ViewModelB 之上) (这实际上是与 ViewA 在同一窗口中的另一个用户控件) 当 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>
更新
这个解决方案有一个小障碍。命令参数绑定到属性。但它在加载时检索它,而不是在执行命令时检索它。我需要它在命令执行时发生,以便所有属性都具有最新值。关于如何实现这一目标的任何想法?