2012-12-06 27 views
4

WPF中是否有某種方式獲得相同的功能DataTemplateSelector爲您提供了,但對於UserControls?通過xaml中的數據綁定基於對象類型動態加載不同的用戶控件

說我有一個StackView,我想綁定一個IEnumerable對象。我想要做的是以某種方式映射,對於綁定IEnumerable中的每個對象類型,查看對象類型並確定要添加到StackView的UserControl。

因此,考慮三類:

public class House : Building{} 

public class Apartment : Building{} 

public class Tent : Building{} 

每個類從Building繼承並有自己的定義UserControl,我想設置DataContextIEnumerable<Building>,並以某種方式獲取StackView來填充其設定的具有特定於類型的UserControl的子代。

我想用盡可能少的代碼來做到這一點。數據綁定和XAML膠帶越多越好。

回答

6

您可以在DataTemplate中使用複雜的用戶控件;只需將DataTemplate作爲您的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> 
+0

甜!那正是我需要的。不知道你可以綁定到數據源的類型。 – Turbo

2

我不確定我看到了問題。只需爲資源中的每種類型創建DataTemplates,WPF將自動使用它們來呈現每種類型。

+0

但是我已經有具有後面的代碼量票價定製(高度複雜)用戶控件。所以DataTemplate並不適合我。 – Turbo

+0

因此,只需聲明包含適當的UserControl的模板? – GazTheDestroyer

相關問題