gpt4 book ai didi

c# - WPF ListViewItem 多个事件通过 AttachedCommandBehaviour

转载 作者:行者123 更新时间:2023-12-03 10:46:10 25 4
gpt4 key购买 nike

我正在尝试使用 AttachedCommandBehaviours 将 ListViewItem 的两个事件传递给我的 ViewModel .

这是我的风格:

<Style x:Key="MouseDoubleClickStyle" TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}">
<Setter Property="attachedCommandBehavior:CommandBehavior.Event"
Value="MouseDoubleClick" />
<Setter Property="attachedCommandBehavior:CommandBehavior.Command"
Value="{Binding ElementName=ServerListView, Path=DataContext.ListViewItemDoubleClickedCommand}" />
<Setter Property="attachedCommandBehavior:CommandBehavior.CommandParameter"
Value="{Binding}" />
</Style>

这是我的 ListView :
<ListView x:Name="ServerListView" Height="200" ItemsSource="{Binding Servers, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" ItemContainerStyle="{StaticResource MouseDoubleClickStyle}">
<ListView.View>
<GridView>
<GridViewColumn Header="Dienstname" DisplayMemberBinding="{Binding ServiceName}" />
<GridViewColumn Header="Servername" DisplayMemberBinding="{Binding HostName}" />
<GridViewColumn Header="IP" DisplayMemberBinding="{Binding IpAddress}" />
</GridView>
</ListView.View>
</ListView>

在 ViewModel 中,我创建了一个 ICommand 类型的属性,在执行命令时调用它:
private DelegateCommand _listViewItemDoubleClickedCommand;
public ICommand ListViewItemDoubleClickedCommand
{
get
{
return _listViewItemDoubleClickedCommand ??
(_listViewItemDoubleClickedCommand = new DelegateCommand(item => Connect((DiscoveredServerItem) item)));
}
}

这工作正常。
如您所见,我订阅了 MouseDoubleClick 事件。

现在我想另外订阅 MouseDown 事件。
这就是问题开始的地方。

查了很多,看来给ListViewItem的事件附加一个命令并不是那么容易。
有没有机会以这种风格添加第二个命令?
AttachedCommandBehavior v2 确实支持 BindingCollection,但我不知道如何在样式中使用它。

谢谢你的帮助
卡迪科特

编辑:

这里有更多信息。

我想在文本框中写入所选项目(通过单击触发)。
我无法直接将所选项目绑定(bind)到文本框,因为用户应该仍然能够在该文本框中编写自定义服务器 ip。

双击客户端应连接到文本框中指定的服务器。
也许还有另一种解决方案?

我不能使用 ListView 中的 SelectionChanged 事件,因为当用户选择一个项目,然后修改文本框时,单击同一条目时将不再触发选择更改事件。由于 ListView 中可能只有一个条目,因此用户没有机会重新选择该项目。

最佳答案

您可以尝试以下方法:

<ListView x:Name="ServerListView" Height="200" ItemsSource="{Binding Servers, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}">
<ListView.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding ElementName=ServerListView, Path=DataContext.ListViewItemDoubleClickedCommand}" CommandParameter="{Binding}" />
<MouseBinding MouseAction="LeftClick" Command="{Binding ElementName=ServerListView, Path=DataContext.SomeOtherOrSameCommand}" CommandParameter="{Binding}" />
</ListView.InputBindings>
<ListView.View>
<GridView>
<GridViewColumn Header="Dienstname" DisplayMemberBinding="{Binding ServiceName}" />
<GridViewColumn Header="Servername" DisplayMemberBinding="{Binding HostName}" />
<GridViewColumn Header="IP" DisplayMemberBinding="{Binding IpAddress}" />
</GridView>
</ListView.View>
</ListView>

关于c# - WPF ListViewItem 多个事件通过 AttachedCommandBehaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517146/

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