繁体   English   中英

ListView.SelectedItem作为CommandParameter传递给ViewModel WindowsRT XAML

[英]ListView.SelectedItem passing to ViewModel as CommandParameter WindowsRT XAML

我有一个ViewModel,它定义了RelayCommand,在我用ListItemTemplate定义的ListView的视图中。 我需要通过单击列表项来调用带有列表项的值的命令。

视图中的ListView

<ListView x:Name="listView1" SelectionMode="Single" ItemsSource="{Binding SimilarArtists}" MinWidth="360">
                <Interactivity:Interaction.Behaviors>
                    <Core:EventTriggerBehavior EventName="SelectionChanged">
                        <Core:InvokeCommandAction Command="{Binding ResolveSearchPageViewModel.SearchCommand, Converter={StaticResource SelectionChangedConverter}, Mode=OneWay, Source={StaticResource Locator}}" InputConverterParameter="{Binding ElementName=listView1}" />
                    </Core:EventTriggerBehavior>
                </Interactivity:Interaction.Behaviors>


                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid MinWidth="360">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition MaxWidth="48"/>
                                <ColumnDefinition MinWidth="360"/>
                            </Grid.ColumnDefinitions>
                            <Image Grid.Column="0" Width="48" Source="../Assets/singer.png"/>
                            <Grid Grid.Column="1">
                                <Grid.RowDefinitions>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                </Grid.RowDefinitions>
                                <TextBlock Margin="10, 10, 0, 10" FontSize="25" Text="{Binding Name}" TextWrapping="Wrap" Grid.Row="0"/>
                            </Grid>
                        </Grid>

                    </DataTemplate>
                </ListView.ItemTemplate>

            </ListView>

SelectionChangedConverter

public class SelectionChangedConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        var listView = parameter as ListView;

        return listView.SelectedItem;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

中继命令

GoToSearchPageCommand = new RelayCommand<Artist>((item) =>
        {
            var it = item;
            _pageNavigationService.ToLoadingPage(item.Name);
        });

我需要传递SelectedItem的RelayCommand值并调用该命令。 谢谢。 最好的问候,德米特里

附言 对不起,我的英语不太好。

您是否考虑过将listview的SelectedItem属性绑定到视图模型的属性

您不需要命令。 只要声明其绑定,SelectedItem就会为您映射。

只需将一个属性添加到您的视图模型中,即可反映ItemsSource所基于的类型并将其绑定到XAML中。

<ListView SelectedItem = "{Binding MySelectedItem}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM