0

designer.cs を自動的に作成する dbml ファイルを作成しました。

Designer.cs (MVVM のモデル) には、データベースに ElementA と ElementB という 2 つの異なるクラスがあります。

Element_A_UserControl - ElementA の単一インスタンスを表示 Element_B_UserControl - ElementB の単一インスタンスを表示

2 つのスタック パネルを持つ別のユーザー コントロールがあります。最初のスタック パネルには、Element_A_UserControl のリストが表示されます。2 番目のスタック パネルには、Element_B_UserControl のリストが表示されます。

スタック パネル #1 XAML は次のとおりです。

<StackPanel>
    <ItemsControl ItemsSource="{Binding AllElements_A}">
         <ItemsControl.ItemTemplate>
                <DataTemplate>
                     <vw:Element_A_UserControl x:Name="elementA">                            
                     </vw:Element_A_UserControl>
                 </DataTemplate>
          </ItemsControl.ItemTemplate>
     </ItemsControl>
</StackPanel>

スタック パネル #2 XAML は次のとおりです。

<StackPanel>
    <ItemsControl ItemsSource="{Binding AllElements_B}">
         <ItemsControl.ItemTemplate>
                <DataTemplate>
                     <vw:Element_B_UserControl x:Name="elementB">                            
                     </vw:Element_B_UserControl>
                 </DataTemplate>
          </ItemsControl.ItemTemplate>
     </ItemsControl>
</StackPanel>

これまでのところ、すべて正常に動作しています。

条件に応じて ElementA のリストまたは ElementB のリストを表示する1 つのスタック パネルが必要です。

注: 要素のリストを取得するプロパティは異なります。すなわち

ItemsSource="{Binding AllElements_A}
ItemsSource="{Binding AllElements_B}

私の質問が十分に明確であることを願っています。

ぼんやり。

4

1 に答える 1

1

1 つの方法は、条件付き DataTemplate を使用することです。このようなもの:

<ItemsControl.Resources>
    <DataTemplate DataType="{x:Type local:ElementAType}">
         <vw:Element_A_UserControl x:Name="elementA">                            
         </vw:Element_A_UserControl>
    </DataTemplate>

    <DataTemplate DataType="{x:Type local:ElementBType}">
         <vw:Element_B_UserControl x:Name="elementB">                            
         </vw:Element_B_UserControl>
    </DataTemplate>
</ItemsControl.Resources>

次に、ビューモデルで次を作成します。

public ObservableCollection<object> CombinedCollection {get; set;}

条件付きでコレクションのいずれかをロードします。

または、両方の ItemsControls を XAML に保持し、 と を使用して条件付きで非表示/表示にしVisibilityますBooleanToVisibilityConverter。これら 2 つの選択肢がある場合、上記の条件付き DataTemplate よりもコードが明確であり、保守が容易であるため、おそらくこちらを選択します。しかし、あなたはそれをしたくないということを示していたようでしたので、オプションとして最初のものを提示しました。

于 2012-05-01T23:44:37.980 に答える