C# 访问DataGridTemplateColumn
我试图在数据网格中找到一条路径。我编写了以下数据模板:C# 访问DataGridTemplateColumn,c#,wpf,datagrid,C#,Wpf,Datagrid,我试图在数据网格中找到一条路径。我编写了以下数据模板: <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition W
<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>
(我把它直接写进了
元素)
在功能按钮\u浏览\u警报\u程序中
我打开一个OpenFile对话框以获取文件
我的问题是-我无法访问文本框。我尝试使用x:name=“someName”
为它命名,但编译器抱怨该名称不存在
我看到了以下问题:
没有第三方软件,也没有编写自己的FindChild
函数,有没有办法做到这一点
(我对WPF很陌生,因此如果您对我的代码有其他意见,请大声说出来)从技术上讲,您应该有一些
ICommand
的实现,将Button.Command
绑定到您的ViewModel并在其中执行您想要的操作,但如果您固定使用这种方式,则可以通过Button\u browse\u alert\u程序中的sender
访问DataConext
private void Button_browse_alert_program(object sender, RoutedEventArgs e)
{
var value = ((sender as Button).DataContext as MyItemClass).AlertProgram;
}
你为什么要这么做?为什么是第三方软件
看看这个:
<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>
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";
}