对单个控件使用类型化的数据模板
本文关键字:数据 类型化 单个 控件 | 更新日期: 2023-09-27 17:57:50
有没有办法将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被声明为其子级。