我正在创建一个WP8应用程序,我将contentcontrol绑定到ViewModel。此ContentControl获取App.xaml.cs中为该VM指定的DataTemplate并绑定到contentcontrol模板。但问题是我无法在我的视图中获取该VM的实例。如何获取或将我的VM实例传递给已绑定到内容控件的View。这是代码?
问题是当DyncmicContentControl获取ViewModel时,它调用GetTemplate()方法从App.xaml.cs获取相应的DataTemplate。这会创建该View的新实例,但我无法将此ViewModel传递给该View。我怎么能实现这个?
ContentControl.cs
public class DynamicContentControl : ContentControl
{
/// <summary>
/// Called when the value of the <see cref="P:System.Windows.Controls.ContentControl.Content" /> property changes.
/// </summary>
/// <param name="oldContent">The old value of the <see cref="P:System.Windows.Controls.ContentControl.Content" /> property.</param>
/// <param name="newContent">The new value of the <see cref="P:System.Windows.Controls.ContentControl.Content" /> property.</param>
protected override void OnContentChanged(object oldContent, object newContent)
{
if (newContent != null)
{
base.OnContentChanged(oldContent, newContent);
this.ContentTemplate = DataTemplateSelector.GetTemplate(newContent);
}
}
}
DataTemplateSelector.cs
/// <summary>
/// Gets the template.
/// </summary>
/// <param name="param">The parameter.</param>
/// <returns></returns>
public static DataTemplate GetTemplate(object param)
{
Type t = param.GetType();
DataTemplate templateData = App.Current.Resources[t.Name] as DataTemplate;
return templateData;
}
MainPage.xaml中
<Controls:DynamicContentControl Content="{Binding UsrCntrlDynamic}" />
MainPageViewModel.cs
public static ObservableCollection<object> ContentControlItems;
public MainPageViewModel()
{
ContentControlItems = new ObservableCollection<object>();
ContentControlItems.Add(new UserControlViewModel());
}
的App.xaml
<DataTemplate x:Key="UserControlViewModel">
<vm:UserControlView />
</DataTemplate>
答案 0 :(得分:0)
DataTemplate
ContentControl
属性上设置的ContentTemplate
应用于ContentControl
的{{1}}媒体资源上设置的对象。因此,在这种情况下设置Content
应该使用您绑定的ContentTemplate
属性中的任何内容呈现DataTemplate
。这假定您UsrCntrlDynamic
的{{1}}设置正确,包括ControlTemplate
来接收和呈现ContentControl
,这可能与您的自定义ContentPresenter
无关。 1}}。