powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Связывание
5 сообщений из 5, страница 1 из 1
Связывание
    #38087912
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть проблема. Просмотрел темы в форумах, но как-то решение не сложилось.
Помогите кто чем может!

Задача: Имеется грид, в строках которого вставлены кнопки. Как, при нажатии кнопки
связать ее с элементом данных, который отображается в гриде?
Для то, чтобы легче въехать в тему я соорудил до предела упрощенный пример.

Коллекция данных:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
namespace wpf1
{
public class Data
{
  public Data(string name) { Name = name; }
  public string Name { get; set; }		
}

public class TestList: List<Data>
{
  public TestList()
  {
    Add(new Data("aaa"));
    Add(new Data("bbb"));
  }
}
}



На форме находится DataGrid у которого колонки сформированы посредством шаблонов.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<Window x:Class="wpf1.MainWindow"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
	xmlns:Wpf1="clr-namespace:wpf1"
        Title="MainWindow" Height="153" Width="308">
<Window.Resources>
  <Wpf1:TestList x:Key="TestListKey"/>
</Window.Resources>

<Grid>
  <DataGrid Name="dataGrid1" AutoGenerateColumns="False" 
    Height="93" HorizontalAlignment="Left" 
    Margin="12,12,0,0" VerticalAlignment="Top" Width="263"
    ItemsSource="{StaticResource TestListKey}" 
  >
    <DataGrid.Columns>

      <DataGridTemplateColumn Header="Name" Width="100">
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding Path=Name}" />
          </DataTemplate>    
      </DataGridTemplateColumn.CellTemplate>

      <DataGridTemplateColumn Header="xxx" Width="50">
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <Button Content="..." Click="Button_Click" />
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>

    </DataGrid.Columns>

  </DataGrid>
</Grid>

</Window>



Как в обработчике кнопки выяснить с каким элементом Data эта кнопка связана?
Код: sql
1.
2.
3.
4.
private void Button_Click(object sender, RoutedEventArgs e)
{
  ???
}



Возможно как-то можно связать кнопку с объектом DataGridRow, но у меня не получается.
Help!!
...
Рейтинг: 0 / 0
Связывание
    #38087983
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак в обработчике кнопки выяснить с каким элементом Data эта кнопка связана?
Взять DataContext у sender'a.
...
Рейтинг: 0 / 0
Связывание
    #38087986
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧитательXВозможно как-то можно связать кнопку с объектом DataGridRow, но у меня не получается.
Help!!
Возможно. Выкинуть RoutedEventHandler, заменив его на биндинги к ICommand, реализованной в модели. В кач-ве параметра команды передавать сам биндинг - это и будет DataGridRow.
...
Рейтинг: 0 / 0
Связывание
    #38087993
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // либо просто так (клик по кнопке делает строку текущей)
            Data data = this.dataGrid1.CurrentItem as Data;
            if (data != null)
                System.Diagnostics.Debug.Write(data.Name);
            
            // либо, для "надежности", связывать объект прямо с кнопкой, старый прием - использовать Tag
            data = ((Button)sender).Tag as Data;
            if (data != null)
                System.Diagnostics.Debug.WriteLine("->" + data.Name);
        }
...
        <Button Content="..." Tag="{Binding}" Click="Button_Click" />
...
Рейтинг: 0 / 0
Связывание
    #38088012
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Буду пробовать.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Связывание
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]