gpt4 book ai didi

c# - 单击按钮时如何选择 ListView 项

转载 作者:行者123 更新时间:2023-11-30 23:16:52 26 4
gpt4 key购买 nike

在我的 ListView 中,我创建了一个控件模板。在这个模板中,我制作了一个按钮,这样 mit listview 中的每个项目都有一个按钮。此按钮代表一个链接,可打开显示的目录。当我单击该按钮时,我的程序会按预期打开资源管理器。但是,当我单击未选中项目的按钮时,它会打开所选项目的路径。所以我的问题是,当我单击 ListView 中的按钮时如何更改所选项目。

这是它的样子:

enter image description here

如您所见,“R1”已被选中,但我点击了“R3”的链接。发生的情况是,C:\Temp\Folder1 被打开,因为“R1”仍然是所选项目。我希望的是 C:\Temp\Folder3 被打开。我认为诀窍应该是在单击代表链接的按钮时选择“R3”。有人知道怎么做吗?

这是我的 XAML 代码:

<ListView Grid.Row="1" ItemsSource="{Binding MyCollection}" FontSize="20" SelectedItem="{Binding SelectedMember, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="7,10,7,0" x:Name="ListView1" SelectionChanged="ListView1_SelectionChanged">
<ListView.View>
<GridView>
<GridViewColumn Header="Header 1" Width="150"/>
<GridViewColumn Header="Header 2" Width="120"/>
<GridViewColumn Header="Header 3" Width="120"/>
<GridViewColumn Header="Header 4" Width="560"/>
<GridViewColumn Header="Header 5" Width="100"/>
</GridView>
</ListView.View>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<EventSetter Event="MouseDoubleClick" Handler="ListViewItem_MouseDoubleClick"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="560"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="0" Content="{Binding ID}" HorizontalAlignment="Center"/>
<ContentPresenter Grid.Column="1" Content="{Binding Name}" HorizontalAlignment="Center"/>
<ContentPresenter Grid.Column="2" Content="{Binding Description}" HorizontalAlignment="Center"/>
<Button Grid.Column="3" Content="{Binding Path}" Style="{StaticResource Link}" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.GoToPathCommand }" HorizontalAlignment="Left" Margin="5,0,0,0" IsEnabled="{Binding ButtonEnabled}"/>
<ContentPresenter Grid.Column="4" Content="{Binding Owner}" HorizontalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="DarkBlue"/>
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>

最佳答案

Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.GoToPathCommand }"

此命令将跳转到 ViewModel 的 Cmd。我假设该命令将检查选择了哪个项目,并将访问它的属性 Path

为了避免这种行为,您可以创建一个命令,它将接受一个参数并从绑定(bind)中设置它:

<Button Content="{Binding Path}"
Command="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, Path=DataContext.GoToPathCommand }"
CommandParameter="{Binding Path}"/>

现在必须调整命令本身:

public MyCmd : ICommand
{

public void Execute(object parameter)
{
string path = (string) parameter;
//Open the path via explorer
}
}

关于c# - 单击按钮时如何选择 ListView 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41821639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com