我有一个Silverlight DataGrid控件,里面有一个文本框和一个按钮控件。
在
之下<dg:DataGrid x:Name="myGrid" AutoGenerateColumns="False">
<dg:DataGrid.Columns>
<dg:DataGridTemplateColumn Header="Name" Width="100">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Name}" x:name="txtName"/>
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
<dg:DataGridTemplateColumn Header="Age" Width="100">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Age}" x:name="txtAge"/>
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
<dg:DataGridTemplateColumn Header="Action" Width="100">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btnCilck" Content="Click" Click="btnClick_Click />
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
</dg:DataGrid.Columns>
</dg:DataGrid>
我想要做的是在运行时我想获取所选行的文本框值(txtName)。
我的意思是,说网格有10行(即特定列中的10个文本框;比如列名称)和10个按钮,比如说行列(让我们这样命名)。
现在,当我点击第5行点击按钮时,我想从该行中的文本框中获取值。
提前致谢。
答案 0 :(得分:7)
在click事件处理程序中,您可以检查发送者(Button)的DataContext,它将是该行所代表的项目,并具有Name,Age等属性。你可以获得绑定到文本框的属性。
假设您使用MVVM设计应用程序,更好的设计是在ViewModel中使用ICommand并将Button的Command属性绑定到该ICommand。在这种情况下,您可以将某些内容绑定到按钮的CommandParameter,并在ICommand处理程序中接收它 - 可以是带有{Binding}
的DataContext本身,也可以是您感兴趣的实际属性。
编辑:抱歉继续使用Command绑定,它们在SL3中并不容易获得;虽然有各种各样的方法,但如果你感兴趣的话可以谷歌吧。命令模式将更好地封装应用程序中的操作。
实际上有一些方法可以获得网格单元格的实际内容,但我不推荐它,因为它会带来很多开销,并且在任何模板发生变化时都会很脆弱;使用实际数据并让控件通过绑定完成工作会好得多。