如何使用ItemsSource在DataGridCell模板中绑定TextBlock.Text

时间:2018-11-13 21:21:56

标签: c# wpf xaml datagrid

我想让g <- new("gComparativa", data=dataValue) 包含文字和图像。
目前,我的代码看起来像这样

XAML:

DataGridCell

样式:

<DataGrid Name="myDataGrid" CellStyle="{StaticResource myCellStyle}" />

C#:

<Style x:Key="myCellStyle" TargetType="DataGridCell">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding}"/>
                    <Image/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

问题是:
如何使用myDataGrid.ItemsSource = myDataTable.DefaultView; 将文本绑定到TextBlock

2 个答案:

答案 0 :(得分:2)

您必须做几件事来修复它

首先,将'AutoGenerateColumns'设置为true

<DataGrid CellStyle="{StaticResource myCellStyle}" AutoGenerateColumns="True">

下一个单元格样式

<Style x:Key="myCellStyle" TargetType="DataGridCell">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                        Path=Content.Text}"/>
                    <Image/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

希望这会有所帮助。

答案 1 :(得分:0)

这假设myDataTable.DefaultView是某些对象(类实例)的列表。

因此,当网格设置为ItemsSource时,它将在每行 中显示列表中的一项。因此,要指定的绑定将是该类的一个或多个属性。

因此,从您的示例模板中,如果将其绑定到在类实例上带有FirstNameLastName的假设的人员类别列表,则可以将模板设置为绑定以将这些属性用于每行是这样的:

 <StackPanel Orientation="Horizontal">
       <TextBlock Text="{Binding FirstName}"/>
       <TextBlock Text="{Binding LastName}"/>
       <Image/>
  </StackPanel>