我遇到与内部DataGrid绑定的问题。绑定适用于DataGrid“帐户”,但不适用于“记录”。我正在使用DataGrid.RowDetailsTemplate作为第二个Datagrid
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<DataGrid ItemsSource="{Binding AccountList}" AutoGenerateColumns="False" x:Name="Account">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding AccountNumber}" Header="Account Number" FontSize="16"/>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" FontSize="16"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding RecordList,Mode=TwoWay}" AutoGenerateColumns="False" x:Name="Record" IsSynchronizedWithCurrentItem="True">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding RecordNumber}" Header="Record Number" FontSize="16"/>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" FontSize="16"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</Grid>
<Grid Grid.Row="1">
<TextBlock Text="Account Number:"> <TextBox Text="{Binding ElementName=Account, Path=SelectedItem.AccountNumber}" x:Name="ANr"/>
<TextBlock Text="Record Number:"> <TextBox Text="{Binding ElementName=Record, Path=SelectedItem.RecordNumber}" x:Name="RecordText"/>
</Grid>
错误消息:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=Record'. BindingExpression:Path=SelectedItem.RecordNumber; DataItem=null; target element is 'TextBox' (Name='RecordText'); target property is 'Text' (type 'String')
第一个TextBox绑定没有问题。第二个没有绑定。
谢谢
答案 0 :(得分:2)
这是因为您的内部DataGrid
名称Record
仅在DataTemplate
的上下文中有效。将为每一行重复此数据模板,因此无法通过名称真正绑定到控件。您需要做什么而不是必须通过SelectedItem
外部DataGrid
进行绑定,但为此您需要Account
个对象中的某些内容来说明在内部网格中选择了哪一行。首先,您需要在SelectedRecord
类中创建Account
,将内部网格绑定到SelectedItem
然后您可以这样做:
<TextBlock Text="Record Number:">
<TextBox Text="{Binding ElementName=Account,
Path=SelectedItem.SelectedReocrd.RecordNumber}"
x:Name="RecordText"/>