这怎么可能是溢出异常......?
<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/>
原因是:这是一个模板(至少有25个UI控件),通常需要模型A作为数据类型。 DataTemplate
是ListvVew
ItemTemplate
。但是数据类型可以是Model B的类型。模型B有一个名为'Model'的属性,它是Model A的类型。
因此,我不想复制粘贴整个块模板并使用样式触发器或DataTemplate
选择器,而只想将DataContex
t(从“{Binding}”更改为“{Binding Model}”)
任何人都有一些建议,一个解决方案?
THX!
编辑:Converter
返回传入值的类型(数据对象本身)。这样我就可以知道模型B何时使用模板,从而更改DataContext。
答案 0 :(得分:1)
我会建议避免在设置数据上下文和触发DataTrigger
之间可能的递归:
让ModelA
和ModelB
同时实现名为IListViewModel
的公共接口,例如使用单个属性getter:
public interface IListViewModel
{
ModelA Model {get;}
}
然后,ModelA
的实现将返回this
,而ModelB
的实现返回this.ModelA
DataTemplate
只会绑定.Model
无论给出哪种视图模型。