This answer is a bit delayed. I ran into a situation where I needed to change all or part of the contents of a window, so as suggested by wpf-it - I used ContentControl.
The window I used this in is being used with a barcode scanner. We have a handful of item types that can be scanned with a different set of options and displays needed for each. Since our app is written in the MVVM pattern (Or at least... MVVM-esque ;) ) I created some XAML:
<ContentControl Grid.Row="2" Content="{Binding itemOptions}" />
Which is then bound to this property:
Public ReadOnly Property itemOptions As UserControl
Get
Select Case SearchResult.GetType()
' Part
Case GetType(partHeaderModel)
Try
Return New partOptions
Catch ex As Exception
' Fail
' Return New noResults
End Try
' Bin
Case GetType(binModel)
Try
Return New binOptions
Catch ex As Exception
' Fail
Return New noResults
End Try
' Rack
Case GetType(rackModel)
Try
Return New rackOptions
Catch ex As Exception
' Fail
Return New noResults
End Try
Case Else
End Select
Return New noResults
End Get
End Property
I have a search function which returns a data model based on the type of item the user scans. Based on the type, the select statement returns the property user control. I use INotifyPropertyChanged along with the scan event to get the window to update.