在列表框项目中单击子项时,列表框选择更改未触发

时间:2015-01-09 09:00:13

标签: c# wpf xaml listbox listboxitem

我有一个wpf用户控件,其中包含一个绑定到View Model的Listbox。每个Listbox项目由三个文本块组成。我创建了UI,当用户点击View Model中的Frist TextBlock(Title)函数时,将调用它。

唯一标识与现在单击的文本块对应的ListBox项。我在视图模型中添加了另一个属性,该属性与Listbox中的SelectionChanged事件绑定。因此,每当我的TextBlock绑定命令被执行时,我将使用我的SelectionChanged属性来查找哪个列表框项并使用其数据上下文。

但我现在面临的问题是,当用户点击第一个文本块时,selectionchanged事件未触发。当用户在第一个文本块外部单击时,只有“选择更改”事件被触发。这使我的视图模型处理错误的列表框项目。

以下是XAML代码段。

                <ListBox ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedItem="{Binding SelectedNotificationItem}" ItemsSource="{Binding MyArray}" BorderThickness="0" Margin="0, 0, 0, 0" ItemContainerStyle="{StaticResource HoverBackgroundStyle}"  Name="NotificationListBox" >
                 <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Border BorderThickness="4,0,0,0" BorderBrush="{Binding ColorThing, Converter={StaticResource SeverityToColorConverter} }" Margin="0, 0, 0, 0">
                                <StackPanel Margin="8, 0" Orientation="Vertical">
                                    <TextBlock   Style="{StaticResource HoverUnderlineStyle}" FontWeight="Bold" TextTrimming="CharacterEllipsis" Name="Title" Text="{Binding Title}" TextWrapping="WrapWithOverflow" Margin="0,4,0,0" >
                                        <TextBlock.InputBindings>
                                            <MouseBinding MouseAction="LeftClick" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ClickTitleCommand}"></MouseBinding>
                                        </TextBlock.InputBindings>
                                    </TextBlock>

                                    <TextBlock  FontWeight="Normal" Name="Desc" Text="{Binding Description}" TextWrapping="WrapWithOverflow">

                                    </TextBlock>
                                    <TextBlock  FontWeight="Normal" Foreground="Gray" Name="Date" Text="{Binding CreationTime, StringFormat={}{0:ddd MM.dd.yyyy} }" Margin="0,4,0,4">
                                    </TextBlock>

                                </StackPanel>
                            </Border>
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

2 个答案:

答案 0 :(得分:0)

您可以尝试将XAML更改为SelectedItem="{Binding SelectedNotificationItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

答案 1 :(得分:-1)

将ListBox更改为 ItemsControl 并将方向更改为水平