ListBox按钮在SelectedItem更改之前触发

时间:2016-07-14 15:20:29

标签: c# wpf xaml listbox

我有一个ListBox,其中的项目包含TextBlockButtonImage。我的Click上有一个Button方法,但我的问题是它在Item的{​​{1}}发生变化之前就会触发。这是我的ListBox;

的代码
ListBox

点击其中一个<ListBox x:Name="imageListBox" ItemsSource="{Binding CCTVImageCollection}" HorizontalAlignment="Center"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Columns="3"/> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBox.ItemTemplate> <DataTemplate DataType="{x:Type local:CCTVImage}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBlock Text="{Binding PictureName}" FontSize="20" FontWeight="Bold" HorizontalAlignment="Left" Margin="5"/> <Button Grid.Column="1" Content="Directory" FontSize="16" HorizontalAlignment="Right" Margin="5" Click="OnDirectoryButtonClick"/> <Button Grid.Column="2" Content="Live Feed" FontSize="16" HorizontalAlignment="Right" Margin="5" Click="OnCCTVButtonClick"/> <Image Grid.Row="1" Grid.ColumnSpan="3" Source="{Binding PicturePath}" Height="400" Width="600" VerticalAlignment="Top"/> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox> ;

后触发的方法
Buttons

正如您所看到的,该方法依赖于private void OnCCTVButtonClick(object sender, RoutedEventArgs e) { var selectedItem = imageListBox.SelectedItem as CCTVImage; if (selectedItem != null) { Process.Start("chrome.exe", selectedItem.CCTVPath); } } ,因为当ListBox.SelectedItem被点击时这不会改变,Button被处理为空并且没有任何反应。如何强制执行SelectedItem点击的SelectedItem更改?

1 个答案:

答案 0 :(得分:1)

希望您没有找到任何解决方案。

通常在这种情况下,我所做的是在选择列表项之前禁用按钮或从单击按钮的容器中获取列表项。试试这个。它应该工作。

private void OnCCTVButtonClick(object sender, RoutedEventArgs e)
{
    var selectedItem = ((ListBoxItem)imageListBox.ContainerFromElement((Button)sender)).Content as CCTVImage;
    if (selectedItem != null)
    {
        Process.Start("chrome.exe", selectedItem.CCTVPath);
    }
}

您还可以通过在按钮单击期间从可视树中查找可视祖先来获取单击的列表项。