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 型の「モデル」というプロパティがあります。したがって、ブロック テンプレート全体をコピーして貼り付け、スタイル トリガーまたはセレクターを使用する代わりに、 tDataTemplateを変更したいだけです。DataContex(「{Binding}」から「{Binding Model}」へ)

誰かがいくつかの提案、解決策を持っていますか?

どうも!

編集:Converter入力値の型 (データ オブジェクト自体) を返します。そうすれば、モデル B がいつテンプレートを使用しているかを知ることができ、DataContext を変更できます。

4

1 に答える 1

1

データコンテキストの設定とトリガーの間の再帰の可能性を回避するために提案する回避策DataTrigger

たとえば、単一のプロパティ ゲッターを 使用して呼び出される共通のインターフェイスを両方ともModelA実装します。ModelBIListViewModel

public interface IListViewModel
{
    ModelA Model {get;}
}

次に、ModelAの実装は を返しますがthisModelBの実装は を返しますthis.ModelA。 Theは、指定されたビュー モデルの にDataTemplate単純にバインドします。.Model

于 2013-01-04T11:13:09.343 に答える