【问题标题】:ListView.SelectedItem passing to ViewModel as CommandParameter WindowsRT XAMLListView.SelectedItem 作为 CommandParameter WindowsRT XAML 传递给 ViewModel
【发布时间】:2015-04-24 20:05:49
【问题描述】:

我有一个定义 RelayCommand 的 ViewModel,在视图中我用 ListItemTemplate 定义了 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 值并调用该命令。谢谢你。最好的问候,德米特里

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

【问题讨论】:

    标签: c# wpf mvvm windows-phone selecteditem


    【解决方案1】:

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

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

    只需向您的视图模型添加一个属性,该属性反映您的 ItemsSource 所基于的类型并在您的 XAML 中绑定到它。

    <ListView SelectedItem = "{Binding MySelectedItem}"
    

    【讨论】:

    • 谢谢。您的意思是在 ViewModel 中将 SelectedItem 转换为我的域模型?
    • 我不确定你所说的演员阵容是什么意思。只需将另一个属性添加到您的视图模型并将列表视图中的 SelectedItem 绑定到它。
    • 你说的是这个属性吗?公共艺术家 SelectedItem { get { return _selectedItem; } 设置 { _selectedItem = 值; _pageNavigationService.ToLoadingPage(_selectedItem.Name); } }
    • 您丢失的 NotifyPropertyChanged 事件。
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2014-04-22
    相关资源
    最近更新 更多