在另一个页面上调用ListBox的SelectionChanged事件处理程序的一个页面上的列表框?

时间:2011-03-22 12:19:19

标签: silverlight mvvm windows-phone-7

我有两页说Main.xamlDetails.xaml。每个页面都有一个ListBox,我将它们设置为ViewModel(相同集合)中的一个集合。奇怪的是,当我在详细信息页面中选择一个项目,它会在SelectionChanged页面和Main页面上调用Details事件处理程序。这是一个错误吗?

我通过在SelectionChanged()方法中解除OnNavigatedFrom eventhandler来解决问题。

修改

在Main.Xaml中,我有以下内容:

<ListBox Name="MainDataListBox" Margin="8,113,8,8" ItemsSource="{Binding DataList}" SelectionChanged="MainDataListBox_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal"   >
                            <Border BorderThickness="3" BorderBrush="#A5FFFFFF" Width="80" Margin="0,20,0,20" Height="60">
                                <Image Source="{Binding ImageUrl, Mode=OneWay}"  VerticalAlignment="Stretch" Margin="0,0,0,0" Width="80" Height="60" Stretch="Fill" />
                            </Border>
                            <TextBlock TextWrapping="Wrap" Text="{Binding Title}" FontSize="40" FontWeight="Normal" VerticalAlignment="Center" Margin="30,0,0,0" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
              </ListBox>

在Details.xaml中我也有同样的ListBox:

<ListBox Name="DetailDataListBox" Margin="8,113,8,8" ItemsSource="{Binding DataList}" SelectionChanged="DetailDataListBox_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal"   >
                            <Border BorderThickness="3" BorderBrush="#A5FFFFFF" Width="80" Margin="0,20,0,20" Height="60">
                                <Image Source="{Binding ImageUrl, Mode=OneWay}"  VerticalAlignment="Stretch" Margin="0,0,0,0" Width="80" Height="60" Stretch="Fill" />
                            </Border>
                            <TextBlock TextWrapping="Wrap" Text="{Binding Title}" FontSize="40" FontWeight="Normal" VerticalAlignment="Center" Margin="30,0,0,0" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
              </ListBox>

“主页面”和“详细信息”都包含单独的EvenHandlers MainDataListBox_SelectionChangedDetailDataListBox_SelectionChanged

问题是当我在详细信息页面中选择项目时,先调用MainDataListBox_SelectionChanged,然后DetailDataListBox_SelectionChanged。 我的viewmodel也是App.cs中的静态模型,我将这两个页面的数据上下文设置为相同的viewmodel。

谢谢和问候

vaysage

1 个答案:

答案 0 :(得分:1)

由于两个列表框都绑定到同一个数据集,因此一个列表中所选时间的更改会影响另一个列表。

很明显,你找到了一个解决方案,但我建议为每个页面设置一个独特的视图模型。如果页面只是显示相同数据的不同方式,则使用单个页面并根据需要更改显示。 (创建自己的视觉状态可能是一种很好的方法。)