WP7列表框选择更改事件不会在内容控件样式中触发

时间:2011-07-11 04:11:10

标签: windows-phone-7 mvvm-light

我一直在摸索为什么选择更改事件的列表框不会触发。我在后面的代码中动态创建了panaroma项目... 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 个答案:

答案 0 :(得分:1)

如果你使用的是mvvm灯,你可以执行以下操作(将代码填入&lt;&gt;备注:

<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>

答案 1 :(得分:0)

查看我对this postthis post的答案,了解如何使用mvvm动态生成全景项和列表框,即没有代码。