c# - Change ContentPresenter's DataTemplate -
i have popup, want display different things depending on various buttons clicked. i've added contentpresenter nad in contentpresenter i've got templateselector. problem far can see checks template use first time popup run , uses template on. there way code change template use?
the code i've got far (xaml):
<popup isopen="{binding isopen}" height="{binding height}" width="{binding width}"> <grid> <contentpresenter x:name="cp" loaded="cp_loaded"> <viewmodel:popuptemplateselector x:name="put" content="{binding}"> <viewmodel:popuptemplateselector.view1> <datatemplate> <view:view1/> </datatemplate> </viewmodel:popuptemplateselector.view1> <viewmodel:popuptemplateselector.view2> <datatemplate> <view:view2/> </datatemplate> </viewmodel:popuptemplateselector.view2> <viewmodel:popuptemplateselector.view3> <datatemplate> <view:view3/> </datatemplate> </viewmodel:popuptemplateselector.view3> <viewmodel:popuptemplateselector.view4> <datatemplate> <view:view4/> </datatemplate> </viewmodel:popuptemplateselector.view4> <viewmodel:popuptemplateselector.view5> <datatemplate> <design:view5/> </datatemplate> </viewmodel:popuptemplateselector.view5> </viewmodel:popuptemplateselector> </contentpresenter> </grid> </popup>
and popuptemplateselector(c#) is
public class popuptemplateselector : datatemplateselector { public datatemplate view1{ get; set; } public datatemplate view2 { get; set; } public datatemplate view3 { get; set; } public datatemplate view4 { get; set; } public datatemplate view5 { get; set; } public override datatemplate selecttemplate(object item, dependencyobject container) { popupviewmodel pop = item popupviewmodel; if(pop.templatetouse == "view1") { return view1; } else if(pop.templatetouse == "view2") { return view2; } else if(pop.templatetouse.equals("view3")) { return view3; } else if (pop.templatetouse.equals("view4")) { return view4; } else if(pop.templatetouse.equals("view5")) { return view5; } return null; } }
i suggest use datatriggers bound templatetouse
property on viewmodel update contenttemplate
. , use contentcontrol
instead of contentpresenter
<popup isopen="{binding isopen}" height="{binding height}" width="{binding width}"> <grid> <grid.resources> <datatemplate x:key="view1template"> <view:view1/> </datatemplate> <datatemplate x:key="view2template"> <view:view2/> </datatemplate> <datatemplate x:key="view3template"> <view:view3/> </datatemplate> <datatemplate x:key="view4template"> <view:view4/> </datatemplate> <datatemplate x:key="view5template"> <design:view5/> </datatemplate> <style x:key="contentstyle" targettype="{x:type contentcontrol}"> <style.triggers> <datatrigger binding="{binding path=templatetouse}" value="view1"> <setter property="contenttemplate" value="{staticresource view1template}" /> </datatrigger> <datatrigger binding="{binding path=templatetouse}" value="view2"> <setter property="contenttemplate" value="{staticresource view2template}" /> </datatrigger> <datatrigger binding="{binding path=templatetouse}" value="view3"> <setter property="contenttemplate" value="{staticresource view3template}" /> </datatrigger> <datatrigger binding="{binding path=templatetouse}" value="view4"> <setter property="contenttemplate" value="{staticresource view4template}" /> </datatrigger> <datatrigger binding="{binding path=templatetouse}" value="view5"> <setter property="contenttemplate" value="{staticresource view5template}" /> </datatrigger> </style.triggers> </style> </grid.resources> <contentcontrol x:name="cp" loaded="cp_loaded" style="{staticresource contentstyle}" content="{binding}" /> </grid> </popup>
Comments
Post a Comment