MVVM을 Silverlight 5와 함께 사용하고 있습니다. 달성하고자하는 것은 ListBox
의 항목 (예 : ListView.xaml)을 선택하고 다른보기 (예 : SelectionView.xaml)에서 ListBox
의 선택한 항목선택한 항목의 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>
을 추 신 : 구문 강조 표시가 설정되었습니다. o language-all : lang-xml하지만 작동하지 않는 것 같습니까?
고마워, 그게 내가 필요로하는 정보 였어! 내 ViewModel의 새 인스턴스를 만들었다는 것을 알지 못했습니다. 그리고 [이 예제] (http://blog.falafel.com/blogs/11-08-17/Singleton_ViewModels_in_Silverlight.aspx)와 같은 Singleton ViewModel을 만드는 방법에 대한 많은 정보가 있습니다. – Phasma