Silverlight 5でMVVMを使用しています。達成したいのはListBox
、あるビュー(ListView.xamlなど)でアイテムを選択し、選択したアイテムをListBox
別のビュー(SelectionView.xamlなど)で表示することです。
私が選択したアイテムは、この回答で説明されているように、添付された動作を介して作成されたObservableCollection<MyItem>
(と呼ばれる)にありますSelectedItems
問題は、2つの異なるXAMLファイルを使用していることのようです。選択が行われる同じXAMLファイルでにをバインドするListBox
と、アイテムは同じビューの別のファイルに問題なく表示されます。しかし、別のファイルでは、空のままです。SelectedItems
ListBox
ListBox
どちらのビューもViewModel
DataContextと同じものを使用します。
私は正しい方向へのいくつかの指針について非常にうれしいです。私は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:構文の強調表示はlanguage-all:lang-xmlに設定されていますが、機能していないようです。