如何自动选择WPF ListViewItem

发布于 2024-08-15 14:55:57 字数 832 浏览 2 评论 0原文

我的 WPF UserControl 中有一个 ListView,使用 ItemTemplate 来显示项目。模板内有一个按钮。当我选择一个项目然后单击另一项目的按钮时,先前选择的项目仍然处于选中状态。我想知道如何在单击按钮时自动选择按钮所在的项目。

Xaml

<UserControl.Resources>
  <DataTemplate x:Key="ItemTemplate">
    <Border>
      <Grid>
        <!-- lots of stuff go here -->
        <Button Click="MyButton_Click">Clickme</Button>
      </Grid>
    </Border>
  </DataTemplate>
</UserControl.Resources>

<ListView x:Name="_listView"
  ItemTemplate="{StaticResource ItemTemplate}">
</ListView>

C# 代码隐藏

void MyButton_Click(object sender, RoutedEventArgs e)
{
  MessageBox.Show( string.Format( "clicked on {0}",  
    this._listView.SelectedItem.ToString() ) ) ;
}

I have a ListView in my WPF UserControl using an ItemTemplate to display the items. Within the template is a button. When I select one item and then click on the button of another item, the previously selected item is still selected. I wonder how to automatically select the item the button is in when the button is clicked.

Xaml

<UserControl.Resources>
  <DataTemplate x:Key="ItemTemplate">
    <Border>
      <Grid>
        <!-- lots of stuff go here -->
        <Button Click="MyButton_Click">Clickme</Button>
      </Grid>
    </Border>
  </DataTemplate>
</UserControl.Resources>

<ListView x:Name="_listView"
  ItemTemplate="{StaticResource ItemTemplate}">
</ListView>

C# Code behind

void MyButton_Click(object sender, RoutedEventArgs e)
{
  MessageBox.Show( string.Format( "clicked on {0}",  
    this._listView.SelectedItem.ToString() ) ) ;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你丑哭了我 2024-08-22 14:55:57

我将通过获取发送者对象的数据上下文来做到这一点。假设您的列表视图是 MyObject 类型的对象列表...那么类似的东西将允许您引用所选对象。

    void MyButton_Click(object sender, RoutedEventArgs e) 
    {
        Button b = sender as Button;
        if (b == null)
        {
            return;
        }

        MyObject o = b.DataContext as MyObject;
        if (o != null)
        {
            // Put stuff for my object here
        }                                    
    }

I would do it by getting the data context of the sender object. Assuming your listview is a list of objects of type MyObject... then something like this would allow you to reference the selected object.

    void MyButton_Click(object sender, RoutedEventArgs e) 
    {
        Button b = sender as Button;
        if (b == null)
        {
            return;
        }

        MyObject o = b.DataContext as MyObject;
        if (o != null)
        {
            // Put stuff for my object here
        }                                    
    }
秋叶绚丽 2024-08-22 14:55:57

当您按下按钮时,您的单击/鼠标按下事件由按钮处理,因此不会路由到 ListView 控件。

解决此问题的一种可能方法是在按钮单击事件中手动设置 listview.SelectedItem。

When you press the button your click / mouse down event is handled by the button and therefore does not route through to the ListView control.

A possible way to solve this is to manually set the listview.SelectedItem in the button click event.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文