Вы забыли поставить 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
Я не уверен, что это правильный способ обработки платежей, но он ближе всего подходит к вашему первоначальному образцу, где все работало хорошо .
Представления никогда нельзя инстанцировать нигде "ниже" уровня UI. VMs существуют ниже той области, поэтому это не место для помещения той логики (как Вы уже поняли).
почти всегда будет некоторое событие уровня UI, которое укажет на потребность создать представление. В Вашем примере это могла бы быть строка (дважды) нажимают событие на datagrid. Это было бы местом к новому и показало бы Ваше окно DetailsView.
Поскольку Kiff отметил:
Представления никогда нельзя инстанцировать нигде "ниже" уровня UI. VMs существуют ниже той области, поэтому это не место для помещения той логики (как Вы уже поняли).
почти всегда будет некоторое событие уровня UI, которое укажет на потребность создать представление. В Вашем примере это могла бы быть строка (дважды) нажимают событие на datagrid. Это было бы местом к новому и показало бы Ваше окно DetailsView.
необходимо понять, что M-V-VM немного отличается, чем другие шаблоны как MVC или MVP. ViewModel не имеет никаких сведений из первоисточника о UI. Открытие другого представления является определенной для представления функцией. Модель Представления должна заботиться меньше, какой или сколько используют представления, это - данные. Я, скорее всего, никогда не открывал бы представление через команду.
сопроводительный текст http://blogs.msdn.com//johngossman/attachment/576163.ashx
Вот основное эмпирическое правило на этом.
при обработке локальных действий в представлении можно инициировать из модели представления.
, Если это - перекрестное представление (как показ поискового экрана), затем любое использование шаблон EventAggregator (сервис обработки событий) или вводит Контроллер Приложения, который Вы вызываете методы на, и это в свою очередь отображает поиск.
Мы используем вариант на этом шаблоне, Здесь у нас есть контроллеры, которые представляют VM, таким образом, datacontext Представления является VM, и наши DTOs являются свойствами VM/Controller. Мы называем это контроллером все еще, поскольку мы используем это в качестве контрольной точки и таким образом обрабатываем определенную команду от Представления. Это (я думаю), где мы реализовали бы команду такой как Ваш.