如何将字符串变量绑定到绑定到DataSet的Datagrid行详细信息

时间:2012-02-10 07:46:06

标签: wpf xaml data-binding datagrid

我有Datagrid绑定到我的数据库

<WpfToolkit:DataGrid Name="DataGrid1" Grid.Row="1" 
      ItemsSource="{Binding Path=MainSearchBinding}" />

我的行详细信息绑定到数据库

中我的表的Intro列
<WpfToolkit:DataGrid.RowDetailsTemplate>            
    <DataTemplate>
        <StackPanel Orientation="Horizontal" Margin="5">
                <StackPanel Orientation="Vertical" Margin="5" >
                    <TextBlock Foreground="CadetBlue" FontSize="13" 
                    Width="Auto" TextWrapping="Wrap" 
                    Text="{Binding Path=Intro}"/>

            </StackPanel>
        </StackPanel>
    </DataTemplate>
</WpfToolkit:DataGrid.RowDetailsTemplate>

我想要的是在我的表格中使用Intro列。我想使用我的代码中的字符串值而不是列Intro。如何将字符串值绑定到我的行详细信息?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我稍微修改了我的xaml代码,将Name添加到Text Block。

<WpfToolkit:DataGrid.RowDetailsTemplate>

                <DataTemplate>

                    <StackPanel HorizontalAlignment="Stretch" Orientation="Vertical" Margin="5">
                        <TextBlock Foreground="CadetBlue" FontSize="14"
                            TextWrapping="Wrap" Name="rowdetails" HorizontalAlignment="Stretch"
                            />
                    </StackPanel>
                </DataTemplate>


            </WpfToolkit:DataGrid.RowDetailsTemplate>

我在后面的代码中将此代码添加到OnMouseClick。 retString是我的字符串变量。它在每个单击的行详细信息中显示我的字符串变量。

 Microsoft.Windows.Controls.DataGridRow row = (Microsoft.Windows.Controls.DataGridRow)(DataGrid1.ItemContainerGenerator.ContainerFromItem(DataGrid1.SelectedItem));

            // Getting the ContentPresenter of the row details
            DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row);


            DataTemplate template = presenter.ContentTemplate;
            TextBlock txt = (TextBlock)template.FindName("rowdetails", presenter);
            txt.Text = retString;

不要忘记在代码中添加FindVisualChild。这是代码。

private childItem FindVisualChild<childItem>(DependencyObject obj)
    where childItem : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is childItem)
                    return (childItem)child;
                else
                {
                    childItem childOfChild = FindVisualChild<childItem>(child);
                    if (childOfChild != null)
                        return childOfChild;
                }
            }
            return null;
        }

我不知道为什么没有人回答我的问题。也许它不受欢迎。