我有一个DataTemplate,其中我有一个带有2个RowDefinitions的Grid布局。我在第一行有一个TextBox,在第二行有一个ComboBox。
我在ResourceDictionary中定义了DataTemplate。
这是DataTemplate的代码:
<DataTemplate x:Key="myDataTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Name ="txtChannelDescription" Grid.Row="0" Margin="1,1,1,1"/>
<ComboBox Name="cmbChannelTag" Grid.Row="1" IsReadOnly="True" Margin="1,1,1,1"/>
</Grid>
</DataTemplate>
我在后面的代码中使用此DataTemplate:
(DataTemplate中)FindResource( “myDataTemplate”)
如何在运行时设置TextBox.Text的值和ComboBox的ItemSource? 我使用DataTemplate作为DataGridTemplateColumn.Header的模板。
答案 0 :(得分:0)
创建适合您目的的自定义数据类型(在此示例中使用名为ChannelDescription
和ChannelTag
的属性),然后将值绑定到DataTemplate
:
<DataTemplate x:Key="myDataTemplate" DataType="{x:Type NamespacePrefix:YourDataType}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Text="{Binding ChannelDescription}" Grid.Row="0" Margin="1,1,1,1"/>
<ComboBox ItemsSource="{Binding ChannelTag}" Grid.Row="1" IsReadOnly="True"
Margin="1,1,1,1"/>
</Grid>
</DataTemplate>
它会像这样使用:
在您的视图模型中,您将拥有一个集合属性,例如名为Items
:
public ObservableCollection<YourDataType> Items { get; set; }
(您的属性应该实现INotifyPropertyChanged
接口,与此不同)
在您的视图中,您将拥有一个集合控件,比如ListBox
:
<ListBox ItemsSource="{Binding Items}" ItemTemplate="{StaticResource myDataTemplate}" />
然后,集合控件中的每个项目都具有相同的DataTemplate
,但这些值将来自YourDataType
集合中Items
类型的实例。