Событие изменения выбора списка WP7 не запускается в стиле управления контентом - PullRequest
0 голосов
/ 11 июля 2011

Я почесал голову, почему событие выбора, измененное для списка, не запускается.У меня есть элементы панаромы, которые динамически создаются в коде позади ... Вид нового для wpf / xaml

<Style x:Key="PanoramaItemStyle" TargetType="ContentControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Grid>
                    <controls:PanoramaItem x:Name="ItemLocationPanoramaItem" Header="{Binding TagName}">
                        <ListBox  ItemsSource="{Binding ItemLocators}" Height="496" SelectedItem="{Binding SelectedItemLocation, Mode=TwoWay}" SelectionChanged="ItemLocatorsList_SelectionChanged" >
                            <ListBox.ItemsPanel>
                                <ItemsPanelTemplate >
                                    <StackPanel Orientation="Vertical"  ScrollViewer.VerticalScrollBarVisibility="Auto" />
                                </ItemsPanelTemplate>
                            </ListBox.ItemsPanel>
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel>
                                        <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
                                            <StackPanel Width="311">
                                                <TextBlock Text="{Binding Item.Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextLargeStyle}"/>
                                                <TextBlock Text="{Binding Location.Description}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                                            </StackPanel>
                                        </StackPanel>
                                    </StackPanel>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                    </controls:PanoramaItem>
                    <ContentPresenter/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="White"/>
</Style>

Это в коде для представления.

 public LocationGroups()
    {
        InitializeComponent(); 
        LocationGroupsPanaroma.DefaultItem = LocationGroupsPanaroma.Items[0];
        viewModel = this.DataContext as LocationGroupsViewModel;
        CreateDynamicPanaromaItems();
    }


    private void CreateDynamicPanaromaItems()
    {
        foreach (Model.LocationGroup group in viewModel.LocationGroups)
        {
            if (group.TotalItems > 0)
            {
                PanoramaItem pi = new PanoramaItem();
                pi.Header = group.Name;
                pi.Orientation = System.Windows.Controls.Orientation.Horizontal;
                ItemLocationListViewModel itemLocationViewModel = viewModel[group.LocationGroupId];
                pi.DataContext = itemLocationViewModel;
                pi.Style = Resources["PanoramaItemStyle"] as Style; 
                LocationGroupsPanaroma.Items.Add(pi);
            }
        }

    }

Ответы [ 2 ]

1 голос
/ 11 августа 2011

если вы используете mvvm light, вы можете сделать следующее (введите свой код для <> замечаний:

<i:Interaction.Triggers>
  <i:EventTrigger EventName="SelectionChanged">
    <mvvm:EventToCommand 
    Command="{Binding <yourviewmodel>.<yourrelaycommand>, Mode=OneWay, Source={StaticResource Locator}}" CommandParameter="{Binding SelectedValue, ElementName=<nameofyourlistbox>}"/>
  </i:EventTrigger>

0 голосов
/ 11 июля 2011

См. Мои ответы на этот пост и этот пост о том, как динамически генерировать элементы панорамы и списки с помощью mvvm, т.е. без кода.

...