有没有一种方法可以将某个Border的某些属性分配给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的新实例,以便上述DataTemplate可以在其中显示吗?

最佳答案

假设您绑定到一个视图模型,该模型公开了类型为SingleItem的名为“ Item”的属性:

定义数据模板后,这应该可以工作:



<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声明为其子级。

10-08 20:05