0

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

<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/>

原因:这是一个通常需要模型 A 作为数据类型的模板(至少有 25 个 UI 控件)。是DataTemplate一个ListvVew ItemTemplate。但是数据类型可以是模型 B 类型。模型 B 有一个名为“模型”的属性,它是模型 A 类型。因此,与其复制粘贴整个块模板并使用样式触发器或DataTemplate选择器,我只想更改DataContext (从“{Binding}”到“{Binding Model}”)

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

谢谢!

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

4

1 回答 1

1

我建议的解决方法是避免设置数据上下文和触发之间可能的递归DataTrigger

拥有两者ModelAModelB实现一个通用接口IListViewModel,例如使用单个属性获取器调用:

public interface IListViewModel
{
    ModelA Model {get;}
}

然后,ModelA' 的实现将返回this,而ModelB' 的实现返回this.ModelATheDataTemplate简单地绑定到.Model它给出的任何视图模型。

于 2013-01-04T11:13:09.343 回答