如何在Relay Command中获取Listview ItemClick Vallue

Siv*_*mar 6 c# mvvm windows-8 winrt-xaml windows-store-apps

嗨我正在使用MVVM模式在Windows商店应用程序中工作,我在接收listview itemclick值在relay命令中有一些问题.现在我得到了所选的项目值.但是不知道如何获得itemclickValue.在这里,我附上了我的代码.

XAML

 <ListView x:Name="lstItem" ItemTemplate="{StaticResource ItemTemplate}"  ItemsSource="{Binding ItemList}" Padding="130,0,0,0" SelectedItem="{Binding SelectedItem,Mode=TwoWay}">
            <Triggers:Interactions.Triggers>
                <Triggers:EventTrigger EventName="SelectionChanged">
                    <Triggers:InvokeCommandAction Command="{Binding SelectedItemCommand}" CommandParameter="{Binding SelectedItem,Mode=TwoWay}"/>
                </Triggers:EventTrigger>
            </Triggers:Interactions.Triggers>
        </ListView>
Run Code Online (Sandbox Code Playgroud)

ViewModel代码

private Item _selectedItem;
    public Item SelectedItem { get { return _selectedItem; } set { _selectedItem = value; NotifyPropertyChanged("SelectedTrends"); } }



private RelayCommand<Item> _selectedItemCommand;
    public RelayCommand<Item> SelectedItemCommand
    {
        get
        {
            return this._selectedItemCommand
                ?? (this._selectedItemCommand= new RelayCommand<Item>(item=>
                {
                    MessageDialog messagedialog = new MessageDialog(item.Name,"Test");
                    messagedialog.ShowAsync();
                }));
        }

    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*arc 8

这里有一些冗余:

选项1:备用CommandParameter:

private Item _selectedItem;
public Item SelectedItem 
{ 
     get { return _selectedItem; } 
     set { _selectedItem = value; NotifyPropertyChanged("SelectedTrends"); } 
}



private RelayCommand _selectedItemCommand;
public RelayCommand SelectedItemCommand
{
    get
    {
        return this._selectedItemCommand
            ?? (this._selectedItemCommand= new RelayCommand(() =>
            {
                MessageDialog messagedialog = new MessageDialog(selectedItem.Name,"Test");
                messagedialog.ShowAsync();
            }));
    }

}
Run Code Online (Sandbox Code Playgroud)

和XAML:

<ListView x:Name="lstItem" ItemTemplate="{StaticResource ItemTemplate}"  ItemsSource="{Binding ItemList}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}" Padding="130,0,0,0">
    <Triggers:Interactions.Triggers>
        <Triggers:EventTrigger EventName="SelectionChanged">
            <Triggers:InvokeCommandAction Command="{Binding SelectedItemCommand}" />
        </Triggers:EventTrigger>
     </Triggers:Interactions.Triggers>
 </ListView>
Run Code Online (Sandbox Code Playgroud)

选项2:备用SelectedItem绑定:

<ListView x:Name="lstItem" ItemTemplate="{StaticResource ItemTemplate}"  ItemsSource="{Binding ItemList}" Padding="130,0,0,0">
    <Triggers:Interactions.Triggers>
        <Triggers:EventTrigger EventName="SelectionChanged">
            <Triggers:InvokeCommandAction Command="{Binding SelectedItemCommand}" CommandParameter="{Binding SelectedItem, ElementName=lstItem}"/>
        </Triggers:EventTrigger>
     </Triggers:Interactions.Triggers>
 </ListView>
Run Code Online (Sandbox Code Playgroud)

并从ViewModel中删除SelectedItem属性,除非您需要其他内容.

编辑

如果要处理项目上的单击事件,则需要将行为移动到ItemTemplateDataTemplate父控件,例如放置控件的网格.这使您可以处理项目上的单击事件.