0

MVVM을 Silverlight 5와 함께 사용하고 있습니다. 달성하고자하는 것은 ListBox의 항목 (예 : ListView.xaml)을 선택하고 다른보기 (예 : SelectionView.xaml)에서 ListBox의 선택한 항목선택한 항목의 ObservableCollection에 여러보기에서 바인딩 (MVVM, SL5)

내 선택 항목에 ObservableCollection<MyItem> (SelectedItems이라고 함) in this answer

문제는 내가 두 개의 서로 다른 XAML 파일을 사용하고 있습니다 것 같다 설명 첨부 행동을 통해 만들어집니다. 선택이 이루어지는 동일한 XAML 파일에서 ListBoxSelectedItems에 바인딩하면 해당 항목이 문제없이 동일한보기에서 다른 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> 

을 추 신 : 구문 강조 표시가 설정되었습니다. o language-all : lang-xml하지만 작동하지 않는 것 같습니까?

답변

1

동일한 ViewModel 인스턴스을 사용하려면 을 사용해야합니다.

보기 모델을 Singleton으로 만들고이를 XAML이 아닌 코드 (생성자 또는 PageLoaded 이벤트에서)로 할당하면됩니다.

+0

고마워, 그게 내가 필요로하는 정보 였어! 내 ViewModel의 새 인스턴스를 만들었다는 것을 알지 못했습니다. 그리고 [이 예제] (http://blog.falafel.com/blogs/11-08-17/Singleton_ViewModels_in_Silverlight.aspx)와 같은 Singleton ViewModel을 만드는 방법에 대한 많은 정보가 있습니다. – Phasma

관련 문제