更改DataTemplate中存在的TextBlock文本

时间:2013-08-08 07:51:09

标签: c# wpf datatemplate

我有一个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的模板。

1 个答案:

答案 0 :(得分:0)

创建适合您目的的自定义数据类型(在此示例中使用名为ChannelDescriptionChannelTag的属性),然后将值绑定到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类型的实例。