Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Связывание / 5 сообщений из 5, страница 1 из 1
21.12.2012, 11:35
    #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
21.12.2012, 12:30
    #38087983
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связывание
авторКак в обработчике кнопки выяснить с каким элементом Data эта кнопка связана?
Взять DataContext у sender'a.
...
Рейтинг: 0 / 0
21.12.2012, 12:32
    #38087986
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связывание
ЧитательXВозможно как-то можно связать кнопку с объектом DataGridRow, но у меня не получается.
Help!!
Возможно. Выкинуть RoutedEventHandler, заменив его на биндинги к ICommand, реализованной в модели. В кач-ве параметра команды передавать сам биндинг - это и будет DataGridRow.
...
Рейтинг: 0 / 0
21.12.2012, 12:39
    #38087993
LR
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
21.12.2012, 12:52
    #38088012
ЧитательX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связывание
Спасибо! Буду пробовать.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Связывание / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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