Mike Hillberg has some great observations about WPF application architecture as it pertains to model interaction in his "Model See Model Do" post. I am very much in agreement with Mike on this subject. And let me also say that I'm very happy to see Mike posting a bit more on WPF recently. One thing that might easily be overlooked in his article is a little trick that Mike uses to ensure that bindings on his command and argument objects resolve correctly. Namely, he derives them from Freezable: public class MethodCommand : Freezable // Enable ElementName and DataContext bindings public class MethodArgument : Freezable // Enable ElementName and DataContext bindings Normally, ElementName and DataContext bindings are resolved based on the target dependency object's position within the element tree (or the namescope to which the target dependency object belongs). But in this case, the target dependency object is not actually in the tree. Instead, it is just a property value on another object.
Read More...