Wpf 带有DataTemplateSelector的ContentControl-需要帮助
我有个问题。。。也许有人可以(请!)帮忙。 我使用的是一个具有和枚举类型的模型,以及一个应该保存枚举中每个选定类型的UI模型的属性:让我们像这样定义它们:Wpf 带有DataTemplateSelector的ContentControl-需要帮助,wpf,datatemplate,contentcontrol,datatemplateselector,Wpf,Datatemplate,Contentcontrol,Datatemplateselector,我有个问题。。。也许有人可以(请!)帮忙。 我使用的是一个具有和枚举类型的模型,以及一个应该保存枚举中每个选定类型的UI模型的属性:让我们像这样定义它们: class ViewModel { Types selectedType{get;set;} UiModelBase editedModel{get;set;} } 我希望有一个内容控件,在每次更改selectedType时使用datatemplateselector来更改其视图 <ListBo
class ViewModel
{
Types selectedType{get;set;}
UiModelBase editedModel{get;set;}
}
我希望有一个内容控件,在每次更改selectedType时使用datatemplateselector来更改其视图
<ListBox x:Name="RuleTypeList" ItemsSource="{Binding Source={StaticResource Types}}" SelectedItem="{Binding Path=selectedType}"/>
<!--Content control-->
<ContentControl ContentTemplateSelector="{StaticResource ruleEditTemplateSelector}"
Content="{Binding SelectedItem, ElementName=RuleTypeList}"/>
问题:在我创建的要由ruleEditTemplateSelector返回的DataTemplates中
DataContext是类型的(同意这一点),但我需要访问editedModel来创建我的DataTemplate…我不知道如何处理它
提前谢谢 如果我理解正确,您希望在templateselector中创建DataTemplate,而DataTemplate基于editedModel属性 我会这样解决这个问题: Windows.xaml:
<Window.Resources>
<local:Selector x:Key="sel"/>
<DataTemplate x:Key="templateA">
<TextBlock Text="{Binding editedModel.PropertyName}"/>
</DataTemplate>
<DataTemplate x:Key="templateB">
<TextBlock Text="{Binding editedModel.PropertyName}"/>
</DataTemplate>
<DataTemplate x:Key="templateC">
<TextBlock Text="{Binding editedModel.PropertyName}"/>
</DataTemplate>
</Window.Resources>
public class Selector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is ClassA)
return (container as FrameworkElement).FindResource("TemplateA") as DataTemplate;
else if (item is ClassB)
return (container as FrameworkElement).FindResource("TemplateB") as DataTemplate;
else if (item is ClassC)
return (container as FrameworkElement).FindResource("TemplateC") as DataTemplate;
return null;
}
}
这将根据项目的类型返回现有的datatemplate。我希望我对你的理解是正确的,这对你有帮助。解决办法并不难
DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContentControl},Path=DataContext}"
这样,模板的上下文与他父母的内容相同,我可以访问他的成员。
我想我试着这么做,但我没有正确的编码。。。
感谢Cstein的参与 不…这不是我的问题。我知道工作流程。问题出在templateA、B、C中,因为找不到editedModel.PropertyName。(数据上下文为selectedType…)如果您的Window.xaml的datacontext是您的viewmodel,并且您将datatemplates放入Window.Resources标记中,那么您可以从DataTemplate中访问editedModel.PropertyName是的,我在Windows中有DataTemplate。参考资料和否…不幸的是,它说在sectedType中找不到任何:editedModel.PropertyName…这是真的…是真的只要不声明,就找不到具有该名称的属性。还是我误解了你?我很震惊我可能不明白你在说什么。。。editedModel.PropertyName的实例已存在于代码隐藏中…为什么要再次声明它…我想更改已存在的实例。我理解错了?谢谢!我一直在寻找这个解决方案。