我在 UserControl 中有一个 DataGrid。 UserControl 连接到保存 DataGrid 数据的 ViewModel。在本例中,数据是联系人的数据。我想通过按钮使“名称”列可单击。
问题是,我需要将按钮的 TextBlock 绑定到 ViewModel 中的属性 (ContactFullName),但它会在该按钮的 Text 属性上抛出错误“Windows Presentation Foundation (WPF) 项目不支持 Datagrid”文本块。我该如何修复?代码如下:
<Grid Grid.Row="1">
<DataGrid HorizontalAlignment="Left"
Width="Auto"
ItemsSource="{Binding CompanyContactsList}"
SelectedItem="{Binding SelectedContact, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionMode="Single"
SelectionUnit="FullRow"
IsReadOnly="True"
AutoGenerateColumns="False"
CanUserAddRows="False"
>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontSize" Value="12"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="ContactName"
Command="{Binding Path=DataContext.BtnContactName, RelativeSource={RelativeSource FindAncestor, AncestorType={x:TypeExtension DataGrid}}}"
>
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image Source="..\..\Images\DG Cell Background.png"
x:Name="ContactNameImg"/>
<TextBlock Text="{Binding Path=DataContext.ContactFullName, RelativeSource={RelativeSource FindAncestor, AncestorType={x:TypeExtension Datagrid}}}"/>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!-- ... MORE COLUMNS ... -->
</DataGrid.Columns>
</DataGrid>
</Grid>
XAML 类型及其成员的名称区分大小写。 请参阅 XAML 中的大小写和空格。
在这种情况下,您只需要这个绑定:
<TextBlock Text="{Binding Path=DataContext.ContactFullName,
RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}}"/>