c# ListView Relay命令绑定

本文关键字:绑定 命令 Relay ListView | 更新日期: 2023-09-27 18:04:16

有人可以帮助我与网格的列表视图。我希望当你点击一个元素时,一个函数被调用,我得到当前的项目。我已经有了以下XAML代码:

<ListView Name="lstView" ItemsSource="{Binding Path=SimResults}" >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding SelectedItemCommand}" CommandParameter="{Binding SelectedItem, ElementName=lstView}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="FileUniqueID" Width="Auto" DisplayMemberBinding="{Binding Path=FileUniqueID}" />
                <GridViewColumn Header="XML" Width="Auto" DisplayMemberBinding="{Binding Path=XML}" />
                <GridViewColumn Header="Request" Width="Auto" HeaderStringFormat="" DisplayMemberBinding="{Binding Path=RequestShort}" />
                <GridViewColumn Header="RequestDate" Width="Auto" DisplayMemberBinding="{Binding Path=RequestDate}" />
                <GridViewColumn Header="Response" Width="Auto" DisplayMemberBinding="{Binding Path=ResponseShort}" />
                <GridViewColumn Header="ResponseDate" Width="Auto" DisplayMemberBinding="{Binding Path=ResponseDate}" />
                <GridViewColumn Header="ResendCounter" Width="Auto" DisplayMemberBinding="{Binding Path=ResendCounter}" />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>
在cs文件中,我有以下函数:
private Item selectedItem;
private RelayCommand selectedItemCommand;
this.selectedItemCommand = new RelayCommand(this.SelectedItems);
        public Item SelectedItem
        {
            get { return selectedItem; }
            set { selectedItem = value; OnPropertyChanged("SelectedTrends"); }
        }
        public RelayCommand SelectedItemCommand
        {
            get
            {
                return this.selectedItemCommand;
            }
        }
        private void SelectedItems(object obj)
        {
            this.requestXml = this.selectedItem.DisplayName;
        }

当我选择一个元素selectedItems,我可以得到项目。

我测试了上面的代码,它工作得很好。但是我有个问题。我有不同的选项卡,当我点击一个不同的选项卡与左键,它总是运行SelectionChanged事件,我得到一个Null引用异常。

c# ListView Relay命令绑定

一种解决方案是为listView中的"SelectedItem"创建一个属性。

那么,在你的VM中:

private YourType _selectedResult;
public YourType SelectedResult
{
    get { return _selectedResult; }
    set { _selectedResult= value; OnPropertyChanged("SelectedResult"); }
}

并在ListView上绑定这个属性:

<ListView Name="lstView" ItemsSource="{Binding Path=SimResults}" SelectedItem="{Binding SelectedResult}">

确保在函数InitializeComponent()之前初始化selectedItemCommand,例如:

public MainWindow()
{
    this.selectedItemCommand = new RelayCommand(this.SelectedItems);
    InitializeComponent();
}