您可以將ContentPresenter放入您的BaseView中。 然後將你的AView和BView包裝到數據模板中。現在,您可以使用轉換器來選擇ContentPresenter顯示的模板。
<Page>
<Page.Resources>
<DataTemplate x:Key="AViewTemplate">
<views:AView />
</DataTemplate>
<DataTemplate x:Key="BViewTemplate">
<views:BView />
</DataTemplate>
<conv:ModeToTemplateConverter ATemplate="{StaticResource AViewTemplate}" BTemplate="{StaticResource BViewTemplate}" />
</Page.Resources>
<ContentPresenter Content="{Binding YourViewModel}"
ContentTemplate="{Binding Mode, Converter={StaticResource ModeToTemplateConverter}}" />
</Page>
轉換器可以是這樣的:
public class ModeToTemplateConverter : IValueConverter
{
public DataTemplate ATemplate { get; set; }
public DataTemplate BTemplate { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var mode = value as Mode?;
switch (mode)
{
case Mode.A:
return ATemplate;
case Mode.B:
return BTemplate;
default:
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}