2

我有一个 DataTemplate,其中有一个带有 2 个 RowDefinitions 的网格布局。我在第一行有一个 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 的 Value 和 ComboBox 的 ItemSource?我使用 DataTemplate 作为 DataGridTemplateColumn.Header 的模板。

4

1 回答 1

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

于 2013-08-08T08:03:40.787 回答