我有两页说Main.xaml
和Details.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_SelectionChanged
和DetailDataListBox_SelectionChanged
。
问题是当我在详细信息页面中选择项目时,先调用MainDataListBox_SelectionChanged
,然后DetailDataListBox_SelectionChanged
。
我的viewmodel也是App.cs中的静态模型,我将这两个页面的数据上下文设置为相同的viewmodel。
谢谢和问候
vaysage
答案 0 :(得分:1)
由于两个列表框都绑定到同一个数据集,因此一个列表中所选时间的更改会影响另一个列表。
很明显,你找到了一个解决方案,但我建议为每个页面设置一个独特的视图模型。如果页面只是显示相同数据的不同方式,则使用单个页面并根据需要更改显示。 (创建自己的视觉状态可能是一种很好的方法。)