2011-04-06 50 views
2

我需要实现主/细节View,有DataGrid为主,相当可能TextBlockTextBox成分显示为每一行场细节 - 尽管我知道DataForm组件,但我并不确定这是否是解决方案,因为目前我没有要求支持对数据进行CRUD操作。如何在Silverlight工具包DataGrid单元格值绑定到一个TextBlock或文本框的文本属性

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

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 -->}" /> 

不要犹豫,询问任何其他细节为咨询的每一位,将不胜感激。

回答

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的房产。这是我

<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" /> 

请注意,我的TextBoxDataContext设置为DataGridSelectedItem绑定到列在DataGrid

XAML。因此,当用户单击DataGrid中的一行时,TextBox将填充与DataGrid中的列绑定的LabName

+0

非常感谢贡献,这是一个非常有趣的方法。 – 2011-04-06 18:11:41

+1

我已经稍微编辑了标记:在网格中包装了TextBox组件,以避免为每个元素声明一个DataContext属性。非常感谢! – 2011-04-06 18:45:37

+0

@Nano:我想我会去编辑我的代码来做到这一点。从来没有想到我这样做。 – 2011-04-06 18:46:48

相关问题