2011-03-22 48 views
0

我有兩頁說Main.xamlDetails.xaml。每個頁面都有一個ListBox,我將它設置爲ViewModel(Same collection)中的一個集合。奇怪的是,當我在Details頁面中選擇一個項目時,它會調用SelectionChanged事件處理程序Main頁面和Details page.Is this a bug?列表框在另一頁上調用ListBox的SelectionChanged事件處理程序?

我已通過在OnNavigatedFrom()方法中取消掛接SelectionChanged事件處理程序解決了此問題。

編輯

在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

+0

聽起來像你掛鉤兩個列表直到同一事件。如果沒有代碼,它肯定很難說。 – 2011-03-22 12:48:48

+0

@Matt萊西我把這兩個列表掛鉤到單獨的事件。 – Vaysage 2011-03-23 05:08:18

+0

你可以發佈一些代碼,演示如何重現這一點。 – 2011-03-23 09:22:27

回答

1

由於兩個listsboxes被綁定到同一數據在一個列表中選擇時間的變化會影響到其他。

顯然你找到了解決辦法,但我建議每個頁面都有獨特的視圖模型。如果頁面是顯示相同數據的不同方式,則使用單個頁面並根據需要更改顯示。 (創建你自己的視覺狀態可能是一個很好的方法來做到這一點。)

+0

感謝您的答案。如果可能,請發佈「創建您自己的視覺狀態」的鏈接,因爲我對這個想法完全陌生。提前感謝。 – Vaysage 2011-03-28 08:35:59

+0

@Vaysage嘗試從此開始:http://blogs.silverlight.net/blogs/justinangel/archive/2008/12/25/custom-vsm-visualstatemanagers-in-silverlight-2-0.aspx – 2011-03-28 09:12:17

相關問題