Вопрос о дизайне M-V-VM. Вызов представления от ViewModel

Вы забыли поставить r = r + 1 после

komz = komz - kom

    vntT(r, 1) = dz
    vntT(r, 2) = komz ' Debt
    vntT(r, 3) = dw
    vntT(r, 4) = kom  '  payment
    vntT(r, 5) = " .. komz > kom"

, поэтому он перезаписывает этот бит в следующем цикле.

РЕДАКТИРОВАТЬ: Надеюсь, теперь я понимаю это, и это то, что вам нужно: я думаю, это правильно, что вы перезаписали свой ряд, но это нужно только перезаписать последние три столбца. Поэтому я думаю, что в этом конкретном случае вам нужно проверить, есть ли уже значение в массиве в этой позиции, чтобы вы не перезаписывали его:

 If komz > kom Then

If cstr(vntT(r,1)) = "" then 'because of this if-statement, it will not overwrite previous values
   vntT(r, 1) = dz
   vntT(r, 2) = komz 'debt
end if
vntT(r, 3) = dw
vntT(r, 4) = kom 'payment
vntT(r, 5) = " komz>kom"

r = r + 1

РЕДАКТИРОВАТЬ (снова): я играл с вашими данными и, возможно, это то, что вам нужно?:

    If komz > kom Then
        If CStr(vntT(r, 1)) = "" Then 'because of this if-statement, it will not overwrite previous values
            vntT(r, 1) = dz
            vntT(r, 2) = komz 'debt
        End If
        vntT(r, 3) = dw
        vntT(r, 4) = kom 'payment
        vntT(r, 5) = " komz>kom"

        r = r + 1
        vntT(r, 1) = dz
        vntT(r, 2) = komz - kom
        vntS(i + 1, 2) = komz - kom
    ElseIf komz < kom Then

Я не уверен, что это правильный способ обработки платежей, но он ближе всего подходит к вашему первоначальному образцу, где все работало хорошо .

18
задан Jab 19 November 2008 в 19:49
поделиться

4 ответа

Представления никогда нельзя инстанцировать нигде "ниже" уровня UI. VMs существуют ниже той области, поэтому это не место для помещения той логики (как Вы уже поняли).

почти всегда будет некоторое событие уровня UI, которое укажет на потребность создать представление. В Вашем примере это могла бы быть строка (дважды) нажимают событие на datagrid. Это было бы местом к новому и показало бы Ваше окно DetailsView.

13
ответ дан 30 November 2019 в 07:23
поделиться

Поскольку Kiff отметил:

Представления никогда нельзя инстанцировать нигде "ниже" уровня UI. VMs существуют ниже той области, поэтому это не место для помещения той логики (как Вы уже поняли).

почти всегда будет некоторое событие уровня UI, которое укажет на потребность создать представление. В Вашем примере это могла бы быть строка (дважды) нажимают событие на datagrid. Это было бы местом к новому и показало бы Ваше окно DetailsView.

необходимо понять, что M-V-VM немного отличается, чем другие шаблоны как MVC или MVP. ViewModel не имеет никаких сведений из первоисточника о UI. Открытие другого представления является определенной для представления функцией. Модель Представления должна заботиться меньше, какой или сколько используют представления, это - данные. Я, скорее всего, никогда не открывал бы представление через команду.

сопроводительный текст http://blogs.msdn.com//johngossman/attachment/576163.ashx

19
ответ дан 30 November 2019 в 07:23
поделиться

Вот основное эмпирическое правило на этом.

  • при обработке локальных действий в представлении можно инициировать из модели представления.

  • , Если это - перекрестное представление (как показ поискового экрана), затем любое использование шаблон EventAggregator (сервис обработки событий) или вводит Контроллер Приложения, который Вы вызываете методы на, и это в свою очередь отображает поиск.

4
ответ дан 30 November 2019 в 07:23
поделиться

Мы используем вариант на этом шаблоне, Здесь у нас есть контроллеры, которые представляют VM, таким образом, datacontext Представления является VM, и наши DTOs являются свойствами VM/Controller. Мы называем это контроллером все еще, поскольку мы используем это в качестве контрольной точки и таким образом обрабатываем определенную команду от Представления. Это (я думаю), где мы реализовали бы команду такой как Ваш.

0
ответ дан 30 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: