DataTrigger溢出异常

时间:2013-01-04 10:01:55

标签: wpf styles datatemplate datacontext datatrigger

这怎么可能是溢出异常......?

<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作为数据类型。 DataTemplateListvVew ItemTemplate。但是数据类型可以是Model B的类型。模型B有一个名为'Model'的属性,它是Model A的类型。 因此,我不想复制粘贴整个块模板并使用样式触发器或DataTemplate选择器,而只想将DataContex t(从“{Binding}”更改为“{Binding Model}”)

任何人都有一些建议,一个解决方案?

THX!

编辑:Converter返回传入值的类型(数据对象本身)。这样我就可以知道模型B何时使用模板,从而更改DataContext。

1 个答案:

答案 0 :(得分:1)

我会建议避免在设置数据上下文和触发DataTrigger之间可能的递归:

ModelAModelB同时实现名为IListViewModel的公共接口,例如使用单个属性getter:

public interface IListViewModel
{
    ModelA Model {get;}
}

然后,ModelA的实现将返回this,而ModelB的实现返回this.ModelA DataTemplate只会绑定.Model无论给出哪种视图模型。