Событие Listbox SelectionChanged не срабатывает, если на странице 2 списка - PullRequest
0 голосов
/ 18 января 2011

Кто-нибудь сталкивался, почему, если на странице два списка, событие SelectionChanged не срабатывает ни для одного из списков? Даже если есть только один список и, скажем, текстовый блок под списком, событие ListChanged списка не сработает. Если я удалю второй список или TextBlock (ниже первого списка), первое событие ListChanged списка будет запущено. Я даже пытался поместить второй список в его собственную сетку, но все еще не получалось, чтобы все события, измененные в списке выбора, запускались. Есть идеи или обходные пути? Спасибо!

Привет, извините, что не публикуем код, вот он.

<!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ListBox  Name="lbProps" Width="441" SelectionChanged="lbProps_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Name="spMain">
                            <Border BorderThickness="1" BorderBrush="white" >
                                <StackPanel Orientation="Vertical">
                                    <TextBlock Text="{Binding}"  Margin="5" Width="430"  FontSize="22"/>
                                </StackPanel>
                            </Border>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Grid>
        <Grid x:Name="ContentPanel2" Grid.Row="2" Margin="12,0,12,0">
                <ListBox  Name="lbProp3" Width="441" SelectionChanged="lbProp3_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Name="spMain3">
                            <Border BorderThickness="1" BorderBrush="white" >
                                <StackPanel Orientation="Vertical">
                                   <TextBlock Text="{Binding}"  Margin="5" Width="430"  FontSize="22"/>
                               </StackPanel>
                            </Border>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Grid>
    </Grid>

Еще один важный пункт. Я связываю списки с общим списком строк в коде позади. Спасибо!

Ответы [ 2 ]

1 голос
/ 18 января 2011

Мне показалось, что вы можете перекрывать элементы управления таким образом, чтобы события не доходили до нужных элементов управления.

Не зная об этом, трудно предложить что-то большее, чем спекуляция.

1 голос
/ 18 января 2011

Это должно быть то, что вы делаете, пожалуйста, покажите свой код.Следующее работает и показывает, что можно иметь несколько SelectionChanged событий, подключенных к нескольким спискам на одной странице

xaml:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <StackPanel>
        <ListBox SelectionChanged="ListBox1_SelectionChanged">
            <ListBoxItem Content="1 - A" />
            <ListBoxItem Content="1 - B" />
            <ListBoxItem Content="1 - C" />
            <ListBoxItem Content="1 - D" />
            <ListBoxItem Content="1 - E" />
            <ListBoxItem Content="1 - F" />
        </ListBox>

        <TextBlock Text="some text" />

        <ListBox SelectionChanged="ListBox2_SelectionChanged">
            <ListBoxItem Content="2 - A" />
            <ListBoxItem Content="2 - B" />
            <ListBoxItem Content="2 - C" />
            <ListBoxItem Content="2 - D" />
            <ListBoxItem Content="2 - E" />
            <ListBoxItem Content="2 - F" />
        </ListBox>
    </StackPanel>
</Grid>

cs:

private void ListBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show((e.AddedItems[0] as ListBoxItem).Content.ToString(), 
                    "List 1", MessageBoxButton.OK);
}

private void ListBox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show((e.AddedItems[0] as ListBoxItem).Content.ToString(),
                    "List 2", MessageBoxButton.OK);
}

Обновление

Если я использую следующее с вашим xaml, я все равно не смогу воссоздать это.

public MainPage()
{
    InitializeComponent();

    lbProps.ItemsSource = new ObservableCollection<String> { "one", "two", "three" };

    lbProp3.ItemsSource = new ObservableCollection<String> { "aaa", "bbb", "cccc" };
}

private void lbProps_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show(e.AddedItems[0].ToString(), "List 1", MessageBoxButton.OK); 
}

private void lbProp3_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show(e.AddedItems[0].ToString(), "List 2", MessageBoxButton.OK); 
}

Использование приведенного выше кода прекрасно работает с вашимXAML и обработчики событий показывают соответствующие сообщения.

Пожалуйста, покажите пример complete , который показывает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...