如何获取listview datatemplate项双击WPF MVVM

时间:2013-04-18 12:00:03

标签: c# wpf listview mvvm

如何绑定到列表视图中显示并被双击的数据窗口?

我想要这样的东西:

<CheckBox Grid.Column="1" Grid.Row="5" Command="{Binding AddItemCommand}"></CheckBox>

我已经完成了所有工作,但不知道如何将命令绑定到listview中的datatemplate或该datatemplate中的Grid。

Datatempalte是这样的:

<DataTemplate x:Key="ServerViewItemTemplate" DataType="ViewModel:ServerViewModel">
        <Border BorderBrush="Black" BorderThickness="1" Margin="10">

            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="70" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>

                <Grid.RowDefinitions>
                    <RowDefinition Height="20" />
                    <RowDefinition Height="20" />
                    <RowDefinition Height="20" />
                    <RowDefinition Height="20" />
                    <RowDefinition Height="20" />
                    <RowDefinition Height="20" />
                </Grid.RowDefinitions>

                <TextBlock Grid.Column="0" Grid.Row="0" Text="ServerId:" FontWeight="Bold"/>
                <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding ServerId}" FontWeight="Bold"/>
                <TextBlock Grid.Column="0" Grid.Row="1" Text="Login:"/>
                <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Login}" />
                <TextBlock Grid.Column="0" Grid.Row="2" Text="Password:"/>
                <TextBlock Grid.Column="1" Grid.Row="2" Text="{Binding Password}" />
                <TextBlock Grid.Column="0" Grid.Row="3" Text="Type:"/>
                <TextBlock Grid.Column="1" Grid.Row="3" Text="{Binding Type}" />
                <TextBlock Grid.Column="0" Grid.Row="4" Text="IpAddress:"/>
                <TextBlock Grid.Column="1" Grid.Row="4" Text="{Binding IpAddress}" />
                <TextBlock Grid.Column="0" Grid.Row="5" Text="Include:"/>
                <CheckBox Grid.Column="1" Grid.Row="5" Command="{Binding AddItemCommand}"></CheckBox>
            </Grid>
        </Border>
    </DataTemplate>

因此,如果双击它,它应该调用ICommand,与CheckBox AddItemCommand中的相同。

1 个答案:

答案 0 :(得分:1)

我建议使用一个行为来处理双击事件。根据双击时要执行的操作,可能需要向行为添加ICommand依赖项属性,以便绑定到viewmodel上的命令。

这是一篇类似的帖子:Is there a way in XAML to select all text in textbox when double clicked?

在该示例中,用户在双击时选择TextBox中的文本。

MORE:

您的XAML将如下所示:

<DataTemplate x:Key="ServerViewItemTemplate" DataType="ViewModel:ServerViewModel">
    <Border BorderBrush="Black" BorderThickness="1" Margin="10">

        <Grid>
            <e.Interaction.Behaviors>
                <local:DoubleClickBehavior Command="{Binding Path=AddItemCommand}"/>
            </e.Interaction.Behaviors>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="70" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
... ...