Как получить доступ к значению текстового поля, которое встроено в сетку Silverlight (3.0)? - PullRequest
2 голосов
/ 25 сентября 2010

У меня есть элемент управления 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) для выбранной строки.

Iзначит, скажем, сетка имеет 10 строк (то есть 10 текстовых полей в этом конкретном столбце; скажем, имя столбца) и 10 кнопок в столбце, скажем, Action (назовем это так).

Теперь, когда я нажимаю на 5-й строкеНажмите кнопку, я хочу получить значение из текстового поля, присутствующего в этой строке.

Заранее спасибо.

1 Ответ

7 голосов
/ 25 сентября 2010

В обработчике события click вы можете проверить DataContext отправителя (кнопки), который будет элементом, представленным этой строкой, и будет иметь свойства Name, Age и т. Д .;вы можете получить свойство, которое привязано к текстовому полю.

Лучшим дизайном, предполагающим, что вы разработали свое приложение с MVVM, является наличие ICommand в ViewModel и привязка свойства Command Button к этой ICommand.В этом случае вы можете привязать что-либо к CommandParameter кнопки и получить его в обработчике ICommand - либо сам DataContext с {Binding}, либо фактическим интересующим вас свойством.

Редактировать: извините за переходс привязками команд, они не доступны в SL3;хотя есть способы обойти это, Google, если вы заинтересованы.Командный шаблон будет намного лучше инкапсулировать действия в вашем приложении.

На самом деле есть способы добраться до фактического содержимого ячеек сетки, но я бы не рекомендовал его, так как он будет сопровождаться большим количествомнакладные расходы и будут хрупкими в случае изменения любого из шаблонов;гораздо лучше работать с реальными данными и оставлять элементы управления для выполнения своей работы через привязки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...