Я довольно часто использовал команды ретрансляции в WPF
проектах, но в настоящее время я работаю над рабочими процессами Windows и выполняю пользовательские действия с собственным дизайнером.Я хочу, чтобы кнопка на моем дизайне добавляла новые поля при нажатии.Я потратил дни на траление в интернете, но, кажется, рабочий процесс Windows победил меня.Это то, что у меня есть, и оно не работает, если кто-нибудь знает, почему, пожалуйста, помогите.
[Designer(typeof(MyCustomActivityDesigner))]
public sealed class MyCustomActivity : AsyncCodeActivity
{
public MyCustomActivity()
{
AddSpecificParameter = new DelegateCommand(AddParameter);
}
public DelegateCommand AddSpecificParameter { get; set; }
public void AddParameter()
{
//add value to an obervable collection
}
}
Реализация команды реле:
public class DelegateCommand :ICommand
{
//Parameterless constructor needed as windows workflow serialises it
public DelegateCommand()
{ }
private readonly Action _action;
public DelegateCommand(Action action)
{
_action = action;
}
public void Execute(object parameter)
{
_action();
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
}
И xaml - это просто кнопка с командойпривязка, но из-за странных вещей в рабочем процессе Windows она проходит через ModelItem (по крайней мере, для других привязок, которые у меня есть)
<Button Command="{Binding Path=ModelItem.AddSpecificParameter}"/>
Так что ключевым отличием от кода, который у меня есть в WPF
работающих приложениях, является параметрбез конструктора, но это не должно повлиять на это? Протестировано это, конструктор без параметров прекрасно работает в приложениях WPF, так что это должно быть из-за невозможности обработки ModelItem команд
Также путь привязки ModelItem работает для всехдругие привязываемые свойства модели представления (например, строки на метках)
Примечание. Действия тестируются / отображаются в перепроектированном конструкторе.