【问题标题】:Get content of TextBox in GridView Item获取 GridView Item 中 TextBox 的内容
【发布时间】:2023-03-18 21:47:01
【问题描述】:

我想在 GridView 项目中获取 TextBox 的文本。

这是我的代码:

XAML:

<GridView x:Name="inventoryGridView" Margin="70,40,10,10" SelectionChanged="inventoryGridView_SelectionChanged">
        <GridView.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="0,0,0,0"  Width="121" Height="128" VerticalAlignment="Top" Background="#19000000">
                    <TextBox Text="{Binding ItemId}" Name="InvItemId"/> 

                    ...

                </StackPanel>
        </GridView.ItemTemplate>
</GridView>

我该怎么做?

【问题讨论】:

  • 你想从codeBehind获取它吗?
  • SelectionChanged事件中,添加var index = inventoryGridView.SelectedIndex;var a = Items[index].ItemId;在代码中,Items是集合设置为GridViewItemsSource

标签: c# wpf xaml win-universal-app


【解决方案1】:

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <XmlDataProvider x:Key="data" XPath="/items/*">
            <x:XData>
                <items xmlns="">
                    <item value="Hello"/>
                    <item value="World" />
                </items>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>

    <StackPanel Orientation="Vertical">
        <ListView x:Name="MyListView" ItemsSource="{Binding Source={StaticResource data}, XPath=/items/item }">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Value">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox Text="{Binding XPath=@value}" Name="GridTextBox"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
        <Button Click="Button_Click">Click Me</Button>
        <TextBlock x:Name="ResultTextBlock">Click the button</TextBlock>
    </StackPanel>
</Window>

后面的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        int theRowYouWant = 0;
        var listBoxItem = (ListBoxItem)MyListView.ItemContainerGenerator.ContainerFromIndex(theRowYouWant);
        var contentPresenter = FindVisualChild<ContentPresenter>(listBoxItem);
        var dataTemplate = contentPresenter.ContentTemplate;
        var txt = (TextBox)dataTemplate.FindName("GridTextBox", contentPresenter);
        ResultTextBlock.Text = txt.Text;
    }

    private childItem FindVisualChild<childItem>(DependencyObject obj)
        where childItem : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(obj, i);
            if (child != null && child is childItem)
                return (childItem)child;
            else
            {
                childItem childOfChild = FindVisualChild<childItem>(child);
                if (childOfChild != null)
                    return childOfChild;
            }
        }
        return null;
    }
}

【讨论】:

    【解决方案2】:

    要在网格列中显示文本框的文本,可以使用如下绑定,

    <TextBox Name="txtValue" />
    <ListView>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="TextBoxValue">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Text, ElementName=txtValue}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
    

    【讨论】:

      【解决方案3】:

      我是这样做的:

      var a = items[inventoryGridView.SelectedIndex].ItemId;
      

      “items”是我的 GridView 的 ItemsSource。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        • 2013-04-04
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多