首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问DataGridTemplateColumn

访问DataGridTemplateColumn
EN

Stack Overflow用户
提问于 2014-01-20 10:12:46
回答 2查看 1.7K关注 0票数 0

我在试着在一条数据仓库里找到一条路。我编写了以下数据模板:

代码语言:javascript
复制
<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="auto" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding AlertProgram}" IsEnabled="False" Grid.Column="0" />
                <Button Content="..." Grid.Column="1" Click="Button_browse_alert_program" />
            </Grid>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

(我把它直接写进了<DataGrid.columns>手袋)

在函数Button_browse_alert_program中,我打开一个OpenFileDialog来获取一个文件。

我的问题是-我无法访问文本框。我尝试使用x:Name="someName"给它命名,但是编译器抱怨这个名称不存在。

我看到了以下这样的问题:How to access datagrid template column textbox text WPF C#How to access control in DataGridTemplateColumn to get value?

在没有第三方软件的情况下,不需要编写我自己的FindChild函数,有办法做到这一点吗?

(我对WPF非常陌生,所以如果您对我的代码有其他评论,请大声说)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-20 10:31:13

你为什么要这么做?为什么会有派对软件?

看一看这个:

代码语言:javascript
复制
    <DataGrid x:Name="dG">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="auto" />
                            </Grid.ColumnDefinitions>
                            <TextBox x:Name="tbx">test</TextBox>
                            <Button Content="click me" Grid.Column="1" Click="OnClick" />
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
        <DataGrid.ItemsSource>
            test
        </DataGrid.ItemsSource>
    </DataGrid>

这是背后的代码:

代码语言:javascript
复制
    private void OnClick(object sender, RoutedEventArgs e)
    {
        TextBox tbx = null;
        // grid is a panel, panels have children
        var parent = VisualTreeHelper.GetParent((DependencyObject)sender) as Panel;
        foreach(var child in parent.Children)
        {
            if (child is TextBox)
            {
                tbx = (TextBox)child;
                break;
            }
        }

        // you should check if tbx != null
        tbx.Text = "Hello";
    }
票数 0
EN

Stack Overflow用户

发布于 2014-01-20 10:24:30

从技术上讲,您应该有一些ICommand的实现,将Button.Command绑定到您的ViewModel中,并在那里做您想做的事情,但是如果您坚持这样做,那么您可以通过Button_browse_alert_program中的sender访问DataConext

代码语言:javascript
复制
private void Button_browse_alert_program(object sender, RoutedEventArgs e)
{
   var value = ((sender as Button).DataContext as MyItemClass).AlertProgram;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21231200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档