You should study the data patterns and the pattern selector. Here is a copied copy of the plugin example from my own code, it is not immediately applicable to buttons, but I think it should help you on your way.
The following is the application resource xaml file. I use it to decide which view to use for a ProjectViewModel based on a variable in the ViewModel:
<DataTemplate DataType="{x:Type viewmod:ProjectViewModel}"> <DataTemplate.Resources> <DataTemplate x:Key="ProjectEditViewTemplate"> <view:ProjectEditView/> </DataTemplate> <DataTemplate x:Key="ServiceSelectionViewTemplate"> <view:ServiceSelectionView/> </DataTemplate> </DataTemplate.Resources> <ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource ProjectViewModelTemplateSelector}" /> </DataTemplate>
ProjectViewModelTemplateSelector is defined as follows:
public class ProjectViewModelTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { FrameworkElement element = container as FrameworkElement; if (element != null && item != null && item is ViewModel.ProjectViewModel) { if ((item as ViewModel.ProjectViewModel).EditMode) { return element.FindResource("ProjectEditViewTemplate") as DataTemplate; } else { return element.FindResource("ServiceSelectionViewTemplate") as DataTemplate; } } else return base.SelectTemplate(item, container); } }
}
source share