我正在尝试在数据网格中设置路径。我写了以下数据模板:
<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"
为其命名,但编译器抱怨该名称不存在。
我看到了以下SO问题:How to access datagrid template column textbox text WPF C#,How to access control in DataGridTemplateColumn to get value?
如果没有第三方软件,并且没有编写我自己的FindChild
功能,有没有办法做到这一点?
(我对WPF很新,所以如果你对我的代码有其他意见 - 说出来)
答案 0 :(得分:0)
从技术上讲,你应该有一些ICommand
的实现,将Button.Command
绑定到你的ViewModel并在那里做你想做的事情但是如果你这样修复它就可以访问{{1在DataConext
sender
Button_browse_alert_program
答案 1 :(得分:0)
你为什么要这么做?为什么选择第三方软件?
看看这个:
<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";
}