更改文本块文本仅适用于第一条记录

change textblock text Only applies to the first record

你好我里面有数据模板和文本块,我想当用户选中复选框时我的文本块文本更改我是这样做的:

<DataGridTemplateColumn Header="نمره" MinWidth="150" Width="auto">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <StackPanel Orientation="Vertical" Margin="5" HorizontalAlignment="Right" ToggleButton.Checked="StackPanel_Checked">
                                                    <Metro:MetroSwitch Checked="chkChecked_Checked" Tag="exc" Margin="0,2">خیلی خوب</Metro:MetroSwitch>
                                                    <Metro:MetroSwitch Checked="chkChecked_Checked" Tag="good" Margin="0,2">خوب</Metro:MetroSwitch>
                                            </StackPanel>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
                                <DataGridTemplateColumn Header="وضعیت" MinWidth="100" Width="auto">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate x:Name="myDataTemplate">
                                            <StackPanel Orientation="Vertical" Margin="5" HorizontalAlignment="Center">
                                                <Metro:MetroTextBlock Text="ثبت نشده" Foreground="Red" Name="txtStatus"/>
                                            </StackPanel>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

和代码隐藏:

private void chkChecked_Checked(object sender, RoutedEventArgs e)
        {
            Arthas.Controls.Metro.MetroTextBlock temp = FindVisualChildByName<Arthas.Controls.Metro.MetroTextBlock>(dataGrid, "txtStatus");


            switch ((sender as Arthas.Controls.Metro.MetroSwitch).Tag.ToString())
            {
                case "exc":
                    temp.Foreground = new SolidColorBrush(Colors.Green);
                    temp.Text = "شده";

                    break;
                case "good":
                    temp.Foreground = new SolidColorBrush(Colors.Green);
                    temp.Text = "شده";
                    break;    
            }
        }

但问题是只有第一条记录会改变
每条记录包含 2 个复选框和 1 个文本块,通过选中每行中的复选框,必须更改该文本块的文本但我的代码仅适用于第一行

我认为这可能是因为您试图在整个数据网格中按名称查找文本块。它总是 return 它找到的第一个具有相同名称的控件。

您应该在复选框所在的行中找到文本块。

在您的方法中添加以下行:

private void chkChecked_Checked(object sender, RoutedEventArgs e)
{
// this will find the datagrid item
var row = dataGrid.ContainerFromElement(sender as DependencyObject);
// now use this datagrid item to find your textblock
Arthas.Controls.Metro.MetroTextBlock temp = FindVisualChildByName<Arthas.Controls.Metro.MetroTextBlock>(row, "txtStatus");
}