datacontext是在App.xaml(使用MVVMLight)中配置的,但是当一个ViewModel是一个View时。
$('a')
我需要使用具有倍数视图的相同ViewModel,我在每个视图(.xaml.cs)的代码隐藏中添加了DataContext但不起作用。
<DataTemplate DataType="{x:Type vm:VMUserControl}">
<views:UCViewSnow />
</DataTemplate>
我需要根据app.config中的参数添加DataContext。 我在WP 2015中使用带有来自nuget的MVVM光的框架4.5.1的WPF
DataContext = ViewModel.ViewModelLocator.GetStaticVMuserControl;
答案 0 :(得分:0)
我发现DataTemplate无法正常工作的几个潜在原因。
1st - 可能您没有使用DataContext(vm:VMUserControl)绑定视图的Content属性。
第二 - 您使用内容控件的自定义模板而不使用ContentPresenter。
例如: App.xaml中
...
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" />
</Application.Resources>
...
在您的视图中
<强>更新强> 如果为一个DataType(viewmodel)定义两个datatemplate 你应该实现并使用自己的ContentTemplateSelector。
<View ...
DataSource={Binding Source={StaticResource Locator}, Path=YourViewModel}>
<View.Resource>
<ResourceDictionar>
<DataTemplate DataType="{x:Type vm:VMUserControl}"
x:Key="darkDataTemplate">
<views:UCViewDark />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:VMUserControl}"
x:Key="snowDataTemplate">
<views:UCViewSnow/>
</DataTemplate>
<local:CustomContentTemplateSelector x:Key="yourContentTemplateSelector"
FirstDataTemplate={StaticResource snowDataTemplate}
SecondDataTemplate={StaticResource darkDataTemplate} />
</ResourceDictionar>
</View.Resource>
<ContentControl Content={Binding}
ContentTemplateSelector={StaticResource yourContentTemplateSelector}/>
CustomContentTemplateSelector.cs
public class CustomContentTemplateSelector:DataTemplateSelector
{
public DataTemplate FirstDataTemplate {get; set;}
public DataTemplate SecondDataTemplate {get; set;}
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container){
// here you should impelement logic for choose data template
// if (condition)
// return FirstDataTemplate
// else
// return SecondDataTemplate
}
}