【发布时间】:2018-07-16 06:55:27
【问题描述】:
我的所有 DataGrid 标题中都有一个 TextBox。
我能够使用以下代码将每个 TextBox 文本绑定到不同的字符串。
但我想将所有文本绑定(两种方式)到单个列表或字符串数组。有什么办法吗?
EDIT #1 : 我想要实现的是将不同文本框的文本绑定到单个实体。它可以是列表、数组、类或任何东西。
XAML:
<DataGrid Name="dataGrid" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}">
<DataGridTextColumn.HeaderTemplate >
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Content, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
<TextBox Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:TestDataGrid}}, Path=strName}"/>
</StackPanel>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<DataGridTextColumn Header="Age" Binding="{Binding Age}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<StackPanel >
<<TextBlock Text="{Binding Content, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
<TextBox Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:TestDataGrid}}, Path=strAge}"/>
</StackPanel>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
C#:
public partial class TestDataGrid : Page
{
public String strName { get; set; }
public String strAge { get; set; }
public TestDataGrid()
{
InitializeComponent();
}
onSomeEvent ()
{
MessageBox.Show("" + strName);
MessageBox.Show("" + strAge);
}
}
【问题讨论】:
-
实现这一目标的唯一方法是使用具有多重绑定的转换器,以便传递数组和列表/整个列表中的索引。实现两种方式绑定到列表/字符串数组是一件痛苦的事情。为什么不使用包含您的字符串值的类,并且应该通知?
-
要获得双向绑定,您必须实现 INotifyPropertyChanged,所以我认为这不符合您的要求。
-
@Sajith Sageer 不清楚要绑定什么?文本框的两种方式的字符串列表?
-
@Rekshino 我想将所有 texbox 中的文本绑定到一个列表中,它可以是字符串列表
-
@LupuSilviu 我也可以使用类。我已经编辑了这个问题。我也不知道如何将它们绑定到一个类