I'd say you need to look into writing your own custom binding handler. http://knockoutjs.com/documentation/custom-bindings.html
Note that even data-bind="text: fooVar" is just a pre-defined binding handler and you can always extend knockout with your own custom ones.
In your case, I would take the following route:
First, redefine your mark-up to accommodate the handler we'll be writing:
<script id="DataItemTemplate" type="text/html">
<td data-bind="visible: SummaryProperty">
<label data-bind="text: Value.ValueAsString" />
<input data-bind="customFormControl: Value" />
</td>
</script>
Secondly, we define our handler. In this case, I chose to test against your DataType property and then add the child element to your table cell.
ko.bindingHandlers.customFormControl = {
init: function ( element, valueAccessor, allBindings, viewModel, bindingContext ) {
var val = valueAccessor(),
dataType = bindingContext.$data.DataType;
if ( dataType == 'Unit' ) {
// define and replace 'element'
} else if ( dataType == 'DropDownSelection') {
// define and replace 'element'
} else {
// control is already an input, so this shouldn't need any work
}
}, update: function ( element, valueAccessor, allBindings, viewModel, bindingContext ) {
// do as you wish when the values are updated.
}
}
The key is to learn more about these parameters that knockout is tossing back to you. Once you understand bindingHandlers, you realize that just about anything you need to do via Knockout can be accomplished and the context is always available.
Best of luck.