我在列表框数据模板中有tetbox。该文本框是可编辑的。如何在选择更改事件中获取文本框文本值。如果我试图使用可视树找到文本,它什么都不返回。请帮忙
ListBoxItem item = this.lstProds.SelectedItem as ListBoxItem;
PhoneTextBox targetBox = FindFirstElementInVisualTree<PhoneTextBox>(item);
string a = targetBox.Text;
private T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
var count = VisualTreeHelper.GetChildrenCount(parentElement);
if (count == 0)
return null;
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child != null && child is T)
{
return (T)child;
}
else
{
var result = FindFirstElementInVisualTree<T>(child);
if (result != null)
return result;
}
}
return null;
}
XAML:
<ListBox Name="lstProds" Margin="0,59,0,0" Background="{x:Null}" Foreground="Black" SelectionChanged="lstProds_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="auto">
<Border BorderBrush="Black" BorderThickness="1" Margin="68,63,-58,-13">
<toolkit:PhoneTextBox Name="txtQuantity" Hint="Quantity" Width="180" Text="{Binding Quantity}"></toolkit:PhoneTextBox>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
我只是将文本框文本属性模式添加为双向。在选择更改事件中,将所选项目作为类。 var context =(lstProds.SelectedItem as ModelClass); string a = context.Quantity;
<ListBox Name="lstProds" Margin="0,59,0,0" Background="{x:Null}" Foreground="Black" SelectionChanged="lstProds_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Border BorderBrush="Black" BorderThickness="1" Margin="91,69,0,9" HorizontalAlignment="Left" Width="145">
<toolkit:PhoneTextBox Name="txtQuantity" Hint="Quantity" Width="144" Text="{Binding Quantity,Mode=TwoWay}"></toolkit:PhoneTextBox>
</Border>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>