none
Помогите заставить button работать в DataTemplate RRS feed

  • Вопрос

  • Не могу разобраться как заставить button работать в DataTemplate. Это стандартный пример visual studio. 

    В list view помещена button. Вот её я и хочу заставить работать вне зависимости от нажатия на строку которая показывает тему в отдельном текст боксе. Т.е. вы выделили тему, в текст боксе показано её полное описание, а далее переходите к расчетам на отдельной странице посредством нажатия кнопки. И так для каждой строки.


      <ListView
                x:Name="itemListView"
                AutomationProperties.AutomationId="ItemsListView"
                AutomationProperties.Name="Items"
                TabIndex="1"
                Margin="-10,0,0,25"
                Padding="120,0,0,60"
                ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
                IsSwipeEnabled="False"
                SelectionChanged="ItemListView_SelectionChanged" Grid.Row="1" HorizontalAlignment="Left" Width="635">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid Margin="6" Width="298">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="60" Height="60">
                                <Image Source="{Binding ImagePath}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
                            </Border>
                            <StackPanel Grid.Column="1" Margin="10,0,0,0">
                                <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="Wrap" MaxHeight="40"/>
                            </StackPanel>
                            <Button Content="{Binding Subtitle}"  Margin="247,-3,-235.143,-3" Width="191" Grid.Column="1" Height="66"  />
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
                <ListView.ItemContainerStyle>
                    <Style TargetType="FrameworkElement">
                        <Setter Property="Margin" Value="0,0,0,10"/>
                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>

    8 декабря 2015 г. 7:59

Ответы

  • Вы зря не используете MVVM.

    Ок, приведите sender к Button и посмотрите что у него в DataContext. Может по нему сможете принять решение. Если нет, то пропишите ему Binding в DataContext такой, чтобы смогли принять решение.

    • Помечено в качестве ответа Alexsey.Tsvetkov 22 декабря 2015 г. 4:56
    10 декабря 2015 г. 14:19
    Отвечающий
  • Определил group и item.  После чего по условию определил какую page открывать.
    void Button_Click(object sender, RoutedEventArgs e)
            {
                // Определение группы, представляемой экземпляром Button
                var Item = (sender as FrameworkElement).DataContext;
                int index = itemListView.Items.IndexOf(Item);
                string AA = Convert.ToString(ItemsPage.A);
                if (AA == "Group-1")
                {
                    if (index == 0)
                    {
                        this.Frame.Navigate(typeof(DewateringContinuous));
                    }
                    if (index == 1)
                    {
                      //
                    }
                    if (index == 2)
                    {
                       //
                    }
                }
    
            }

    19 декабря 2015 г. 19:01

Все ответы

  • Добрый день.

    Не очень понятно должна у вас кнопка учитывать текущую выбранную строку или нет, но вот здесь посмотрите пример с удалением. Вроде как раз то, что вам нужно.

    8 декабря 2015 г. 8:08
    Отвечающий
  • Да, кнопка должна учитывать текущую выбранную строку.
    8 декабря 2015 г. 9:01
  • Да, тогда смотрите пример, он как раз на этот случай.
    8 декабря 2015 г. 9:13
    Отвечающий
  • Алексей, в твоём примере кнопка удаляет информацию строки, а мне надо чтобы кнопка строки открывала определенную страницу информация о которой записана в строке и это не шаблонная страница а разная для всех строк. Как этот переход сделать не знаю из-за неопытности. Весь проект стоит. В случае указанном ниже все кнопки строк открывают одну и туже страницу. Как обозначить для каждой кнопки свою страницу?:

      void Button_Click(object sender, RoutedEventArgs e)
            {
                // Определение группы, представляемой экземпляром Button
                var Item = (sender as FrameworkElement).DataContext;
                
    
    
                this.Frame.Navigate(typeof(DewateringContinuous));
            }
    

    10 декабря 2015 г. 9:21
  • Вы зря не используете MVVM.

    Ок, приведите sender к Button и посмотрите что у него в DataContext. Может по нему сможете принять решение. Если нет, то пропишите ему Binding в DataContext такой, чтобы смогли принять решение.

    • Помечено в качестве ответа Alexsey.Tsvetkov 22 декабря 2015 г. 4:56
    10 декабря 2015 г. 14:19
    Отвечающий
  • Определил group и item.  После чего по условию определил какую page открывать.
    void Button_Click(object sender, RoutedEventArgs e)
            {
                // Определение группы, представляемой экземпляром Button
                var Item = (sender as FrameworkElement).DataContext;
                int index = itemListView.Items.IndexOf(Item);
                string AA = Convert.ToString(ItemsPage.A);
                if (AA == "Group-1")
                {
                    if (index == 0)
                    {
                        this.Frame.Navigate(typeof(DewateringContinuous));
                    }
                    if (index == 1)
                    {
                      //
                    }
                    if (index == 2)
                    {
                       //
                    }
                }
    
            }

    19 декабря 2015 г. 19:01
  • Т.е. вы решили свою проблему? Если да, то отметьте ответ или ответы, которые помогли вам в решении. Если нет, то уточните какие вопросы у вас еще остались.
    21 декабря 2015 г. 10:49
    Отвечающий