我正在使用MVVM和Silverlight 5.我想要實現的是在一個視圖中選擇ListBox
中的項目(例如ListView.xaml)並顯示在另一個視圖中選擇ListBox
中的項目(例如SelectionView.xaml)。將多個視圖綁定到ObservableCollection的選定項目(MVVM,SL5)
我選擇的項目是在ObservableCollection<MyItem>
(稱爲SelectedItems
)所描述的in this answer
的問題似乎是,我使用兩種不同的XAML文件通過附加的行爲產生。如果我在發生選擇的同一個XAML文件中綁定ListBox
到SelectedItems
,則這些項目在另一個ListBox
中顯示在同一視圖中,沒有問題。但在另一個文件中,ListBox
保持空白。
這兩個視圖都使用與DataContext相同的ViewModel
。
我會很高興的指出正確的方向。我是SL新手,所以也許我錯過了一些明顯的東西。
這是工作的代碼:
ListView.xaml
<UserControl x:Class="Silverlight5App.View.Content.ListView"
xmlns:viewModel="clr-namespace:Silverlight5App.ViewModel"
xmlns:behaviours="clr-namespace:Silverlight5App.Behaviours">
<UserControl.Resources>
<viewModel:XYPlotViewModel x:Key="ViewModelTest" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource ViewModelTest}}">
<StackPanel>
<ListBox ItemsSource="{Binding Path=XYPoints}" behaviours:SelectedItems.Items="{Binding SelectedItems}" Name="XYPointsListbox" SelectionMode="Extended" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="2" Text="{Binding id}" />
<TextBlock Grid.Column="1" Margin="2" Text="{Binding x}" />
<TextBlock Grid.Column="2" Margin="2" Text="{Binding y}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox ItemsSource="{Binding SelectedItems}" Name="XYPointsListboxSelection">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="2" Text="{Binding id}" />
<TextBlock Grid.Column="1" Margin="2" Text="{Binding x}" />
<TextBlock Grid.Column="2" Margin="2" Text="{Binding y}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</UserControl>
這個代碼只是給了一個空的列表框:
SelectionView.xaml
<UserControl x:Class="Silverlight5App.View.Content.SelectionView"
xmlns:viewModel="clr-namespace:Silverlight5App.ViewModel"
xmlns:behaviours="clr-namespace:Silverlight5App.Behaviours">
<UserControl.Resources>
<viewModel:XYPlotViewModel x:Key="ViewModelTest" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource ViewModelTest}}" >
<StackPanel>
<ListBox ItemsSource="{Binding Path=SelectedItems}" Name="XYPointsListboxSelection2">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="2" Text="{Binding id}" />
<TextBlock Grid.Column="1" Margin="2" Text="{Binding x}" />
<TextBlock Grid.Column="2" Margin="2" Text="{Binding y}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</UserControl>
PS:語法高亮設置爲t o language-all:lang-xml但似乎不起作用?
謝謝,那正是我需要的信息!我並不知道我創建了ViewModel的新實例。關於如何製作Singleton ViewModel有很多信息,比如[this example](http://blog.falafel.com/blogs/11-08-17/Singleton_ViewModels_in_Silverlight.aspx) – Phasma 2012-01-11 09:32:44