Возможно, моя проблема скорее архитектурная, чем функциональная, но я пытаюсь привязать 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>
обновление
с этим решением есть небольшая дорожная преграда. Параметр команды привязан к свойству. но он извлекает его во время загрузки, а не во время выполнения команды. Мне нужно, чтобы это происходило во время выполнения команды, чтобы все свойства имели последние значения. есть идеи как этого добиться?