0

MVVMをSilverlight 5で使用しています。ListBoxの項目を1つのビュー(ListView.xamlなど)で選択し、別のビュー(たとえば、SelectionView.xaml)内のListBoxの選択項目。選択した項目のObservableCollectionに複数のビューをバインドする(MVVM、SL5)

私の選択した項目が説明するように取り付けた行動を介して作成されObservableCollection<MyItem>SelectedItemsと呼ばれる)in this answer

ている問題は、私は二つの異なるXAMLファイルを使用していますということのようです。同じXAMLファイル内のListBoxSelectedItemsにバインドすると、項目は同じビュー内の別の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しかし動作しないようですか?

答えて

1

これを有効にするには、同じViewModelインスタンスをとする必要があります。

ビューモデルをシングルトンとして作成し、XAMLではなく、コード(コンストラクターまたはPageLoadedイベントのいずれか)で割り当てることができます。

+0

ありがとう、それは私が必要とした情報でした!私はViewModelの新しいインスタンスを作成したことに気づいていませんでした。そして、[この例](http://blog.falafel.com/blogs/11-08-17/Singleton_ViewModels_in_Silverlight.aspx)のように、シングルトンViewModelを作成する方法については、そこに多くの情報があります。 – Phasma

関連する問題