如何访问嵌入Silverlight(3.0)网格中的文本框值?

时间:2010-09-25 06:39:02

标签: silverlight c#-3.0 silverlight-3.0

我有一个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行点击按钮时,我想从该行中的文本框中获取值。

提前致谢。

1 个答案:

答案 0 :(得分:7)

在click事件处理程序中,您可以检查发送者(Button)的DataContext,它将是该行所代表的项目,并具有Name,Age等属性。你可以获得绑定到文本框的属性。

假设您使用MVVM设计应用程序,更好的设计是在ViewModel中使用ICommand并将Button的Command属性绑定到该ICommand。在这种情况下,您可以将某些内容绑定到按钮的CommandParameter,并在ICommand处理程序中接收它 - 可以是带有{Binding}的DataContext本身,也可以是您感兴趣的实际属性。

编辑:抱歉继续使用Command绑定,它们在SL3中并不容易获得;虽然有各种各样的方法,但如果你感兴趣的话可以谷歌吧。命令模式将更好地封装应用程序中的操作。

实际上有一些方法可以获得网格单元格的实际内容,但我不推荐它,因为它会带来很多开销,并且在任何模板发生变化时都会很脆弱;使用实际数据并让控件通过绑定完成工作会好得多。