我在试着在一条数据仓库里找到一条路。我编写了以下数据模板:
<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非常陌生,所以如果您对我的代码有其他评论,请大声说)
发布于 2014-01-20 10:31:13
你为什么要这么做?为什么会有派对软件?
看一看这个:
<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";
}发布于 2014-01-20 10:24:30
从技术上讲,您应该有一些ICommand的实现,将Button.Command绑定到您的ViewModel中,并在那里做您想做的事情,但是如果您坚持这样做,那么您可以通过Button_browse_alert_program中的sender访问DataConext
private void Button_browse_alert_program(object sender, RoutedEventArgs e)
{
var value = ((sender as Button).DataContext as MyItemClass).AlertProgram;
}https://stackoverflow.com/questions/21231200
复制相似问题