Нужно знать, как создать DelegateCommand <Type>, который возвращает целочисленное значение - PullRequest
2 голосов
/ 09 июня 2010

Вот что я пытаюсь сделать.Обратите особое внимание на InsertConlogEntry и на то, как я пытаюсь назначить его для моей DelegateCommand, но как мне обработать возврат int?

Спасибо,

   #region Members        
    public static readonly string AddConlogEntry = "AddConlogEntry";
    public static readonly string GetConlogList = "GetConlogList";
    public static readonly string GetConlogEntry = "GetConlogEntry";            
    public static readonly string Scope = "ConLog";
    #endregion

    #region Ctor
    public ConLogCommands() :base()
    {
        scope = Scope;

        DelegateCommand<ConlogEntryData> AddEntryCmd = new DelegateCommand<ConlogEntryData>("Add New Conlog Entry",
            "AddConLogEntry", InsertConlogEntry);            
        this.Add(AddEntryCmd);
    }
    #endregion

    #region Methods
    private int InsertConlogEntry(ConlogEntryData data)
    {
        ConlogService service = new ConlogService();
        return service.InsertConlogEntry(data.LoanNumber, data.UserId, data.Subject, data.Comment, data.EntryDate);
    }

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Команды предназначены для действий, а не функций. Таким образом, они не должны возвращать никаких значений.

Команда - это действие, которое запускается в ответ на какой-либо ввод. Технически логика должна быть автономной.

При этом, если вам нужно просто вызвать этот метод и проигнорировать результаты , вы можете заключить его в Action<ConlogEntryData> и построить команду делегата с этим:

 Action<ConlogEntryData> action = c => this.InsertConlogEntry(c);
 DelegateCommand<ConlogEntryData> AddEntryCmd = new DelegateCommand<ConlogEntryData>(
         "Add New Conlog Entry","AddConLogEntry", action); 
0 голосов
/ 09 июня 2010

Не без определения собственной версии DelegateCommand<T>, которая принимает Func<T, int> в качестве параметра конструктора, а не просто Action<T>.

Поскольку сама команда не заботится о возвращаемом значении, вы можете инициализировать его следующим образом:

AddEntryCmd = new DelegateCommand<ConlogEntryData>("Add New Conlog Entry",
    "AddConLogEntry", e => InsertConlogEntry(e));
0 голосов
/ 09 июня 2010

Вы не можете. Это займет всего Action<T>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...