2011-04-07 111 views
1

我有一个ItemsControl绑定到对象列表。数据绑定和绑定按钮

它基本上在屏幕上显示一个绑定属性列表,每个旁边都有一个文本框和按钮,以允许您为每个数据库字段添加附加信息。

在按钮的onclick中,我需要将文本框中的字符串存储在该项目的对象中。在XAML看起来有点像这样

  <ItemsControl x:Name="ListDatabaseFields" ItemsSource="{Binding Path=SelectedImport.ColumnMappings}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
         <Grid> 
           <StackPanel> 
            <TextBlock Text="{Binding DatabaseColumn.Name}" TextWrapping="Wrap" Grid.Column="0"/> 
            <TextBox Name="txtNewFileField" Width="100"/> 
           <Button Name="Add" Content="Add File Field" Style="{StaticResource LinkButton}" Width="50" Click="Add_Click"/> 
           </StackPanel> 
         </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

什么在XAML中的最佳方式访问itemcontrol被绑定到该项目的ColumnMapping和更改文件字段属性。

回答

2

我不确定如果我正确理解你的问题,请澄清,如果这不是你正在寻找。


我已经适应了这对我的测试应用程序,我的DataTemplate中看起来是这样的:

<DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding Name}"/> 
     <TextBox MinWidth="100" Name="tbNewName"/> 
     <Button MinWidth="100" 
       Tag="{x:Reference tbNewName}" Click="ButtonNewName_Click" 
       Content="Do Stuff"/> 
    </StackPanel> 
</DataTemplate> 

注意它引用TextBoxButton.Tag,我可以用它在处理程序是这样的:

private void ButtonNewName_Click(object sender, RoutedEventArgs e) 
{ 
    Employee emp = (sender as FrameworkElement).DataContext as Employee; 
    TextBox tbNewName = (sender as FrameworkElement).Tag as TextBox; 
    emp.Name = tbNewName.Text; 
} 

DataContext是继承的,所以发件人(按钮)包含的数据项,在你的情况下ColumnMappingTag给了我TextBox,这就是我需要改变一个属性。

如果您需要引用更多控件,您可以在Tag中创建一个数组。