如何捕获Listbox所选项目

时间:2015-03-04 10:23:16

标签: c# wpf mvvm

我正在使用MVVM,我的代码如下

  <ListBox Grid.Row="0"
             x:Name="myListBox" 
             ItemsSource="{Binding Path=MyClass}"
             ItemTemplate="{StaticResource MyDataTemplate}"
             SelectedItem="{Binding Path=SelectedItem}"
             HorizontalContentAlignment="Stretch">    
    </ListBox>

ItemTemplate包含TextBlockLabel

并在我的 ViewModel

    public object SelectedItem
    {

        get
        {
            return _SelectedItem;
        }
        set
        {
            _SelectedItem = value;
            //Perform My Command
        }
    }

只有在双击后我才能选择该项目。如何才能实现 单击鼠标左键?有没有办法将双击转换为单击?

3 个答案:

答案 0 :(得分:0)

试试这个。 添加MouseUp事件:

<ListBox Grid.Row="0"
         x:Name="myListBox" 
         MouseUp="myListBox_MouseUp"
         ItemsSource="{Binding Path=MyClass}"
         ItemTemplate="{StaticResource MyDataTemplate}"
         SelectedItem="{Binding Path=SelectedItem}"
         HorizontalContentAlignment="Stretch">
    </ListBox>

在代码背后:

private void myListBox_MouseUp(object sender, MouseButtonEventArgs e)
{

}

如果要在MVVM中执行此操作,则需要使用Command作为示例

答案 1 :(得分:0)

我不确定这是你想要的,但这对我有用:

<ListBox Grid.Row="6"
         x:Name="myListBox" 
         ItemsSource="{Binding Path=MyClassItems}"
         SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"
         HorizontalContentAlignment="Stretch">
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBoxItem}">
                            <StackPanel Orientation="Horizontal">
                                <StackPanel Orientation="Horizontal">
                                    <Label Content="FooLabel: "/>
                                    <TextBlock Text="{TemplateBinding Content}"/>
                                </StackPanel>
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>

答案 2 :(得分:-1)

您可以将代码添加到:

private void listBox1_Click(object sender, MouseEventArgs e)
        {
           //Codes : 
        }

或者,当您在ListBox中双击时,可以引发此事件:

private void listBox1_DoubleClick(object sender, EventArgs e)
    {
        listBox1.Click+=listBox1_Click; 
    }

更新:如果您想在点击该项目后执行某些操作,实际上当您单击时您正在更改所选项目的索引时,您将要引发一个名为listBox1_SelectedIndexChanged的事件。所以你要做的就是在这个事件中添加代码。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Your Codes .....
    }