2011-05-26 51 views
3

有沒有辦法將一些邊界屬性賦值給ViewModel,然後讓Border的內容匹配與該VieWModel對應的任何類型的數據模板?爲單個控件使用類型化的數據模板

這是一個很做作的例子,但假設我有一個用戶控件:

<Grid> 
    <StackPanel> 
     <TextBox Height="30" Width="300" Margin="10" Text="{Binding IntProperty}"></TextBox> 
     <TextBox Height="30" Width="300" Margin="10"></TextBox> 
     <Border x:Name="SingleElement" Height="100" Width="350" BorderBrush="Red" /> 
    </StackPanel> 
</Grid> 

而且我有這種類型的數據模板:

<DataTemplate DataType="local:SingleItemViewModel1"> 
    <StackPanel> 
     <TextBlock Margin="10" Text="{Binding A}"></TextBlock> 
     <TextBlock Margin="10" Text="{Binding B}"></TextBlock> 
    </StackPanel> 
</DataTemplate> 

在代碼 - 在我的用戶控制的後面(再次,設計)是否有SingleElement的屬性,我可以將它分配給SingleItemViewModel1的新實例,以便上述DataTempla te會顯示在裏面嗎?

回答

0

假設你一定會暴露一個名爲「項」 SingleItem類型的屬性視圖模型:

定義數據模板之後,這應該工作:

<Grid> 
    <StackPanel> 
     <TextBox Height="30" Width="300" Margin="10" Text="{Binding IntProperty}"></TextBox> 
     <TextBox Height="30" Width="300" Margin="10"></TextBox> 
     <Border x:Name="SingleElement" Height="100" Width="350" BorderBrush="Red"> 
      <ContentControl Content="{Binding Item}"/> 
     </Border> 
    </StackPanel> 
</Grid> 

注意Border是FrameworkElement和Decorator的後代 - 它沒有自己的「內容」,只有一個可視化的孩子。因此ContentControl被聲明爲其子。

+1

我試過了,但是這會導致邊框只顯示類的名稱-Wpf_Sandbox.SingleItemViewModel1;它沒有解決類型化的數據模板。有沒有辦法哄它這樣做? – 2011-05-26 21:15:56

+0

@AdamRackis答案在這裏找到:http://stackoverflow.com/questions/17514824/how-to-get-contentcontrol-to-resolve-datatemplate。基本上,在定義數據模板時使用{x:Type}而不僅僅是類型名稱 – BradleyDotNET 2016-01-26 00:25:43

相關問題