IMHO, the concept of a Widget having a value is that it has only one
value. The "value" can certainly be an object with multiple fields, or
with conversion helper functions (String->Boolean), but it's one value
with a normalized internal representation.
For example, consider an USPostalAddressWidget, which
HasValue<USPostalAddress>. This widget is quite complex, with probably
ample internal textboxes for each field (street, city, state, zip,
suite, etc) and also validation. However, the widget conceptually has
a single value: a USPostalAddress that can be get and set.
In this context, I think it is clear that HasValue is really a
Model-View interface. If it were a Table, it would be
HasValue<TableModel> or HasValue<TableData>, for example. Probably the
primary difference is HasValue doesn't require models to provide
change listener interfaces.
I don't believe that Data Binding and Model/View architectures are
mutually exclusive. The main difference is, with MVC, typically, you
build model POJOs, and build the View to be tightly coupled to the
model interface, so that there is usually (but not always) a one to
one correspondence between View and Model types. With Data Binding
frameworks, the coupling is looser and you can have a many-to-one
relationship, e.g bind POJO.fooField to Widget A and bind
POJO.barField to WidgetB, or further, you can bind into composite
widgets exposing their innards. Data Binding allows for more reuse
since you can repurpose pojo models by slicing and dicing them with
binding expressions, on the other hand, lots of bindings can get messy
and make it harder to track what widgets deal with what data,
especially if the bindings are dynamic or in a DSL.
-Ray