如何将Silverlight Toolkit DataGrid单元格值绑定到TextBlock或TextBox文本属性

时间:2011-04-06 17:42:21

标签: c# silverlight datagrid silverlight-toolkit

我需要实现一个主/详细信息View,将DataGrid作为主要内容,很可能TextBlockTextBox组件显示每个行字段的详细信息 - 尽管我已经了解DataForm组件,但我并不确定这是解决方案,因为目前我还没有回应支持CRUD对该数据的操作。

所以问题基本上是如何将每个DataGridTextColumn绑定到任何给定控件的特定Text属性(例如TextBlock),当选择不同的行时,其值会被提升。< / p>

XAML代码看起来像这样:

<!-- Master -->

<sdk:DataGrid x:Name="FoobarDataGrid" DataContext="foobar" AutoGenerateColumns="False">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn x:Name="FooDataGridColumn" Header="Foo" Binding="{Binding Foo}" />
        <sdk:DataGridTextColumn x:Name="BarDataGridColumn" Header="Bar" Binding="{Binding Bar}" />
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

<!-- Details -->

<TextBox x:Name="FooDetailsTextBlock" Text="{Binding <!-- TODO -->}" />
<TextBox x:Name="BarDetailsTextBlock" Text="{Binding <!-- TODO -->}" />

不要犹豫,要求任何其他细节,因为我会非常感谢您的建议。

1 个答案:

答案 0 :(得分:2)

已编辑:以下是您的代码的样子......

<!-- Master -->

<sdk:DataGrid x:Name="FoobarDataGrid" DataContext="foobar" AutoGenerateColumns="False">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn x:Name="FooDataGridColumn" Header="Foo" Binding="{Binding Foo}" />
        <sdk:DataGridTextColumn x:Name="BarDataGridColumn" Header="Bar" Binding="{Binding Bar}" />
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

<!-- Details -->

<TextBox 
    DataContext="{Binding SelectedItem, ElementName=FoobarDataGrid}"
    x:Name="FooDetailsTextBlock" 
    Text="{Binding Foo}" />

<TextBox 
    DataContext="{Binding SelectedItem, ElementName=FoobarDataGrid}"
    x:Name="BarDetailsTextBlock" 
    Text="{Binding Bar}" />

原始答案......

这是一种方式......

我的DataGrid绑定到自定义类的集合。该类有一个名为LabName的属性。这是我绑定到DataGrid

中的列的内容

XAML

    <sdk:DataGrid 
        Name="LabsDataGrid" 
        ItemsSource="{Binding}" 
        AutoGenerateColumns="False" 
        Height="284" 
        HorizontalAlignment="Left" 
        Margin="205,250,0,0" 
        VerticalAlignment="Top" 
        Width="359" 
        IsReadOnly="True">

        <sdk:DataGrid.Columns>

            <sdk:DataGridTextColumn 
                Header="Lab Name" 
                Binding="{Binding LabName}" />

        </sdk:DataGrid.Columns>

    </sdk:DataGrid>


    <TextBox 
        DataContext="{Binding SelectedItem, ElementName=LabsDataGrid}"
        Name="LabName" 
        Text="{Binding LabName}"
        Height="23" 
        HorizontalAlignment="Left" 
        Margin="324,121,0,0" 
        VerticalAlignment="Top"
        Width="132" />

请注意,我将DataContext的{​​{1}}设置为TextBox的{​​{1}}。因此,当用户点击SelectedItem中的一行时,DataGrid会填充DataGrid中绑定到TextBox列的LabName