有没有一种方法可以将某个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声明为其子级。