MVVMをSilverlight 5で使用しています。ListBox
の項目を1つのビュー(ListView.xamlなど)で選択し、別のビュー(たとえば、SelectionView.xaml)内のListBox
の選択項目。選択した項目のObservableCollectionに複数のビューをバインドする(MVVM、SL5)
私の選択した項目が説明するように取り付けた行動を介して作成されObservableCollection<MyItem>
(SelectedItems
と呼ばれる)in this answer
ている問題は、私は二つの異なるXAMLファイルを使用していますということのようです。同じXAMLファイル内のListBox
をSelectedItems
にバインドすると、項目は同じビュー内の別のListBox
に問題なく表示されます。しかし、別のファイルでは、ListBox
は空のままです。
どちらのビューも、DataContextと同じViewModel
を使用します。
私は正しい方向にいくつかのポインタについて非常に満足しています。私はSLに慣れていないので、明らかに何かが欠けているかもしれません。
これは動作するコードです:
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>
:
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>
と、このコードは、単に空のリストボックスを提供しますPS:構文の強調表示が設定されているo language-all:lang-xmlしかし動作しないようですか?
ありがとう、それは私が必要とした情報でした!私はViewModelの新しいインスタンスを作成したことに気づいていませんでした。そして、[この例](http://blog.falafel.com/blogs/11-08-17/Singleton_ViewModels_in_Silverlight.aspx)のように、シングルトンViewModelを作成する方法については、そこに多くの情報があります。 – Phasma