我正在尝试将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,但是我不知道如何在样式中使用它。
谢谢你的帮助
dic
编辑:
这是更多信息。
我想将所选项目写在一个文本框中(单击触发)。
我无法将所选项目直接绑定(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/