ContentPresenter
テンプレートがバインドされたオブジェクトの一種のビューであるプロパティに基づいて、表示するテンプレートを選択するオブジェクトにバインドしようとしています。
ただし、以下に示すようにバインドを設定すると、プロパティの所有者ではなく、バインドされたプロパティDataContext
が自分DataTemplate
のものになります。どうすればこれを修正できますか?
ありがとう!
ベース オブジェクトは次のようになります (関連するプロパティ以外はすべて切り取っています)。
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>