Interesting question came up as a result of a post of Chris O’Briens:
Interesting you raise ContentTypeBinding. I use this in other areas (e.g. associating content types with Pages libraries). Don’t think it had occurred to me that I could use it here also.
Which kinda makes me wonder why the schema provides two ways of doing the same thing, but that could lead to whole ‘nother discussion 😉
Well, I get interested by questions like that. As far as I can tell…:
- ContentTypeBinding elements exist in the Elements of a feature. They’re so that a feature can bind a new content type to a list
- ContentTypeRef elements exist in the schema of a List definition (List > MetaData > ContentTypes > ContentTypeRef)
So, you can use the ContentTypeRef to create a list with a content type, or you can use a ContentTypeBinding to add it later. And you should be able to do it in the same feature – you could use a ListInstance to create a list using your definition, and then bind your content type. And yes, it does rather look like all three bits could be in the one Feature.
- List to define the list
- ListInstance to create one in your site
- ContentTypeBinding to add your content type.
I wonder what happens if you try to create a list definition without a content type reference? Might try that for a giggle sometime.
Side note: the Property element on a File element in a publishing site with the key PublishingAssociatedContentType is for associating the file (a page layout) with a page content type, not for associating the page content type to the Pages library. You have to do that as well, using a ContentTypeBinding element. (Thanks Waldeck, that was driving me nuts!)
One thought on “ContentTypeRef vs ContentTypeBinding”
Andy, my findings indicate both ContentTypeRef and ContentTypeBinding are required for everything to hang together “properly”:
And doing away with ContentTypeRef didn’t really work when I tried 😉