这怎么可能是一个溢出异常...?
<DataTemplate x:Key="ElementTemplate">
<StackPanel Orientation="Horizontal">
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding Converter={StaticResource TypeConv}}" Value="{x:Type models:GroupModel}">
<Setter Property="Margin" Value="5 0 0 0"></Setter>
<Setter Property="DataContext" Value="{Binding Model}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="{Binding Name}"></TextBlock>
...
<StackPanel/>
<DataTemplate/>原因:这是一个通常需要Model A作为数据类型的模板(至少有25个UI控件)。DataTemplate是ListvVew ItemTemplate。但是数据类型可以是Model B类型。Model B有一个名为' Model‘的属性,它的类型是Model A。因此,我不想复制粘贴整个块模板并使用样式触发器或DataTemplate选择器,我只想更改绑定t(从“{DataContex}”更改为"{Binding Model}")
有人有什么建议或解决方案吗?
谢谢!
编辑:Converter返回输入值的类型(数据对象本身)。这样,我就可以知道模型B何时正在使用模板,从而更改DataContext。
发布于 2013-01-04 19:13:09
我建议在设置数据上下文和触发DataTrigger之间避免可能的递归
让ModelA和ModelB都实现一个名为IListViewModel的公共接口,例如,使用一个属性getter:
public interface IListViewModel
{
ModelA Model {get;}
}然后,ModelA的实现将返回this,而ModelB的实现将返回this.ModelA DataTemplate只是简单地绑定到所给出的任何视图模型的.Model。
https://stackoverflow.com/questions/14154926
复制相似问题