4

WPF で同じ機能を取得する方法はありDataTemplateSelectorますが、UserControls はありますか?

オブジェクトの IEnumerable をバインドする StackView があるとします。私がやりたいことは、バインドされた IEnumerable のオブジェクトの種類ごとに、オブジェクトの種類を調べて、StackView に追加する UserControl を決定するマッピングを何らかの方法で作成することです。

したがって、次の 3 つのクラスが与えられます。

public class House : Building{}

public class Apartment : Building{}

public class Tent : Building{}

各クラスがから継承しBuilding、独自の定義された を持っているUserControl場合、 に設定DataContextし、IEnumerable<Building>どういうわけか StackView を取得して、その子のセットにタイプ固有の UserControl を設定したいと思います。

できるだけ少ないコードビハインドでこれを行いたいと思います。データ バインディングと XAML ダクト テープが多いほど効果的です。

4

2 に答える 2

7

で複雑なユーザー コントロールを使用できますDataTemplateDataTemplateをあなたの として宣言するだけUserControlです。

例:

  <Window x:Class="WpfApplication4.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication4"
            Title="MainWindow" Height="300" Width="300" Name="UI" >
        <Window.Resources>
            <DataTemplate DataType="{x:Type local:House}" >
                <local:HouseUserControl DataContext="{Binding}"/>
            </DataTemplate>
            <DataTemplate DataType="{x:Type local:Apartment}">
                 <local:ApartmentUserControl DataContext="{Binding}"/>
            </DataTemplate>
        </Window.Resources>

        <Grid>
            <ListBox ItemsSource="{Binding ElementName=UI, Path=ListOfBuildings}" />
        </Grid>
    </Window>
于 2012-12-06T21:47:11.950 に答える
2

問題が見えているかどうかわかりません。リソースのどこかにタイプごとに DataTemplates を作成するだけで、WPF はそれらを自動的に使用して各タイプをレンダリングします。

于 2012-12-06T21:28:30.233 に答える