jus*_*ick 3 data-binding silverlight wpf custom-controls datatemplate
我得到的是一个自定义控件,它在 xaml 中实现数据模板:
<DataTemplate x:Key="Templat">
<StackPanel>
<TextBlock Text="Sample Text" />
<TextBlock Text="{Binding Surname}" />
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
和自定义控制:
<local:MyControl x:Name="MyControl1"
ItemTemplate="{StaticResource Templat}" Margin="0,0,-24,8"/>
Run Code Online (Sandbox Code Playgroud)
generic.xaml(在我的自定义控件库中)具有:
<ControlTemplate TargetType="local:MyControl">
<Canvas Name="LayoutRoot" Height="{TemplateBinding Height}"
Width="{TemplateBinding Width}"
Background="{TemplateBinding Background}"
CacheMode="BitmapCache">
<Canvas Name="ItemsHost" Margin="10,185,0,0" Height="615"
Width="{TemplateBinding Width}" CacheMode="BitmapCache">
<local:CustomItem x:Name="Item1"
ContentTemplate="{TemplateBinding ItemTemplate}" />
<local:CustomItem x:Name="Item2"
ContentTemplate="{TemplateBinding ItemTemplate}" />
</Canvas>
</Canvas>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我创建了一个自定义项目控件,其中有一些自定义内容控件。我希望它们都具有相同的内容模板,因此我将它们的内容模板绑定到父控件中定义的 itemtemplate。
我的问题是控件将显示带有“示例文本”文本的文本块,但不显示带有绑定值的文本块。我试图在代码隐藏中指定 DataContext(例如DataContext = new Person() { Surname="Johnson" }
或通过 xaml)。它们都不起作用。
DataContext(Person 类)看起来传递正确,但传递的 DataTemplate 缺少表达式'{Binding Surname}'
。您有任何想法可能会出现什么问题吗?
DataTemplate 中控件的 DataContext 不是从其父级继承的。因此,在您的情况下, 中的所有内容都Templat
将具有与 CustomItem 和 MyControl 不同的 DataContext。
DataTemplate 的 DataContext 来自关联的 ContentControl 或 ContentPresenter 的 Content 属性。因此,就您而言,如果您这样做:
<local:CustomItem x:Name="Item1" Content="{Binding}" ContentTemplate="{TemplateBinding ItemTemplate}" />
Run Code Online (Sandbox Code Playgroud)
然后您可以设置 MyControl 的 DataContext,它将传递到您的 DataTemplate。
从表面上看,您的 MyControl 应该是一个 ItemsControl (如此处所述)。