c# WPF MVVM Datagrid 按钮将 TextBlock 绑定到 DataContext

问题描述 投票:0回答:1

我在 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>
c# wpf mvvm datagrid
1个回答
0
投票

XAML 类型及其成员的名称区分大小写。 请参阅 XAML 中的大小写和空格

在这种情况下,您只需要这个绑定:

    <TextBlock Text="{Binding Path=DataContext.ContactFullName,
                              RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}}"/>
© www.soinside.com 2019 - 2024. All rights reserved.