我正在尝试将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/

10-17 02:11