answered
2013-03-03 23:35:46 +0800
This post is a wiki.
Anyone with karma >100 is welcome to improve it.
In an MVVM pattern, it is the BindComposer that handles the re-rendering, which is what the invalidate flag is for (to notify that the widget needs to be redrawn).
In your example, you have left the BindComposer out of the equation by referencing the textbox Id from the Combobox. Basically, you're doing widget to widget communication. Nothing in what you've done notifies the BindComposer of the fact that something has changed. In MVVM, if something changes on the component side, it will not be reflected to the widget unless you notify the BindComposer. And, vice versa. Make a change on the widget side and it will not reflect on the component side unless you notify BindComposer.
The reason that the dirty flag gets updated when you manually change the textbox value is because you have a @bind in the value attribute that automatically updates the component side of things via BindComposer.