2011-05-26 49 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

相关问题