更改数据模板中的文本块文本

本文关键字:文本 数据 | 更新日期: 2023-09-27 18:26:46

我有一个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的值和组合框的ItemSource?我使用DataTemplate作为DataGridTemplateColumn.Header.的模板

更改数据模板中的文本块文本

创建一个适合您用途的自定义数据类型(在本例中具有名为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,但这些值将来自Items集合中类型为YourDataType的实例。