一个更简单的解决方案是绑定到内容控件的内容属性并为每种类型的内容定义数据模板。
<Window.Resources>
<DataTemplate DataType="{x:Type local:MyType1}">
<Border Background="Red" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:MyType2}">
<Border Background="Green" />
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="24" />
</Grid.RowDefinitions>
<ContentControl Content="{Binding MyContent}" />
<ToggleButton Grid.Row="1"
Content="Toggle"
IsChecked="{Binding IsChecked}" />
</Grid>
//DataContext
public bool IsChecked
{
get { return isChecked_; }
set
{
isChecked_ = value;
NotifyPropertyChanged_("IsChecked");
if (value)
MyContent = new MyType1();
else
MyContent = new MyType2();
}
}
public object MyContent
{
get { return myContent_; }
set
{
myContent = value;
NotifyPropertyChange_("MyContent");
}
}