我正在尝试将 a 绑定ContentPresenter
到一个对象,该对象将根据某个属性选择要显示的模板,其中模板是绑定对象上的一种视图。
但是,当我如下所示设置绑定时,我最终将绑定属性作为DataContext
我DataTemplate
的 s,而不是属性的所有者。我怎样才能解决这个问题?
谢谢!
基础对象看起来像这样(除了相关属性,我已经删除了所有内容):
public class ApplicationInterface : BaseBusinessObject,
IState, INotifyPropertyChanged
{
public Type CurrentPage
{
get
{
return (Type)_properties["CurrentPage"].Value;
}
set
{
_properties["CurrentPage"].Value = value;
}
}
}
然后我尝试CurrentPage
像这样绑定到 XAML 中的属性:
<ContentPresenter Content="{Binding CurrentPage}"
ContentTemplateSelector={StaticResource ResourceKey=PageTemplateSelector}"/>
的实施DataTemplateSelector
:
public class PageTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item,
DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Type)
{
Type t = item as Type;
if (t == typeof(Home))
return element.FindResource("homeTemplate") as DataTemplate;
else if (t == typeof(ProfileEdit))
return element.FindResource("profileTemplate") as DataTemplate;
else if (t == typeof(WBI))
return element.FindResource("wbiTemplate") as DataTemplate;
else if (t == typeof(PC))
return element.FindResource("pcTemplate") as DataTemplate;
}
return null;
}
}
最后是DataTemplate
s:
<DataTemplate x:Key="homeTemplate">
<pages:Home DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate x:Key="profileTemplate">
<pages:ProfileEdit DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate x:Key="wbiTemplate">
<pages:WBI DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate x:Key="pcTemplate">
<pages:PC DataContext="{Binding}"/>
</DataTemplate>